zoukankan      html  css  js  c++  java
  • 字符指针、字符数组

    1.字符指针

    https://blog.csdn.net/qq_43668570/article/details/98980446

    指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间,并有唯一确定的首地址。

    即将字符串的首地址赋值给字符指针可让字符指针指向一个字符串

    如下:

        char* p1="abc";
        char* p2="abc";
        cout<<(p1==p2)<<endl;//1
        cout<<p1<<" "<<p2<<" "<<endl;//abc abc
        cout<<*p1<<" "<<*p2<<" "<<endl;//a a 
       cout<<&p1<<" "<<&p2<<endl;//0x62fe18 0x62fe10

    对指针取内容,是首个字符;对指针取地址,获取到了指针的地址。

    一般来说,不是要取内容*才能获取到内容吗?这里直接输出p1和p2就可以获取到内容了?

    对int型数字来说:

        int* p1=new int(5);
        int* p2=new int(5);
        cout<<(p1==p2)<<endl;//0
        cout<<p1<<" "<<p2;//0x2522560 0x2522580
    cout<<&p1<<" "<<&p2<<endl;//0x62fe18 0x62fe10
    cout<<*p1<<" "<<*p2<<endl;//5 5

    直接输出p1和p2是输出的地址,它们所指向的堆内存的地址,只有用了取内容符号之后才会输出所指内存的内容。

    char str[10] = "Hello";
    char *ptr = str;//数组名代表数组的首地址
    //等价于
     char *ptr;
     ptr = str;//等价于ptr = &str[0];将数组的首地址赋给字符指针ptr

    2.是否添加?

    https://blog.csdn.net/wuwuku123/article/details/103608918

    这种方法定义时,系统会自动在字符串的末尾加上字符串结束符,即 ‘’,:

    char str[]="12345";//sizeof(str)为
    char str[]={"12345"};//6
    char str[6]="12345";//6

    这种方法定义时,系统会自动从未初始化的元素开始,将之后的元素赋为,如上面的数组str中的元素实际上是:'1','2','3','4','5','','','','',''

    char str[10]={'1','2','3','4','5'};

    系统不会自动在字符串的末尾加上字符串结束符;

    此时用sizeof()函数可以正确求出其所占的内存大小;但用strlen()函数不能正确求出其长度,因为strlen是通过判断字符串结束的。

    char str[]={'1','2','3','4','5'};

    所以,采用该方法定义时,一般人为地加上,即char str[]={'1','2','3','4','5', ''};

    char str[]={'1','2','3','4','5', ''};
    
    char str[6]={'1','2','3','4','5'}; //故意给数组预留一个空位
    
    char str[]={“12345”};//第一行手动添加后和当前效果相同
  • 相关阅读:
    stc单品机的命名规则
    代码导入单片机运行
    openlayers tips
    LeetCode 766. Toeplitz Matrix
    【题集】二叉树的遍历各类题型汇总
    LeetCode 821. Shortest Distance to a Character
    关于C++中vector<vector<int> >的使用
    POJ
    LeetCode#155 Min Stack
    LeetCode#160 Intersection of Two Linked Lists
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/15267433.html
Copyright © 2011-2022 走看看