char* 、 字符串字面值、char数组

char* 与 字符串字面值:
    char *pch = "12345"; // pch存储的地址是字符串"12345"中字符'1'所在内存地址

    // sizeof(pch) == 4; pch是char*指针,在32位操作系统中指针统一分配4字节

   // strlen(pch) == 5; int strlen(char*)遍历pch指针记录地址的空间并检查有效字符个数('\0'不是有效字符)

    *pch == '1';
    *(pch+1) == '2';
    *(pch+2) == '3'
    *(pch+3)='a'; // 错误,字符串"12345"在内存常量区不允许修改

char arrChar[] = "12345"; // {'1', '2', '3', '4', '5', '\0'};
       // "12345"的地址为字符串中字符'1'的地址,字符串常量的地址是字符串首元素的地址
       // arrChar的地址为字符串中字符'1'的地址,数组的地址是首元素的地址即&arrChar == &arrChar[0]

       // sizeof(arrChar) == 6;  数组分配6个字节最后一个字节存储'\0'

       // strlen(arrChar)==5; 非'\0'字符个数

       char* parr = arrChar;
       // parr存储的地址为arrChar的地址

       *(parr+0) <==> arrChar[0];
       *(parr+1) <==> arrChar[1];
       *(parr+1)='a'; <==> arrChar[1] = 'a'; // 正确,数组有单独的存储空间


char指针数组

    char *parr[] = {"123am","456bg","789ck"}; // parr存储了三个char*,每个char*对应一个字符串

// sizeof(parr) == 12

    char **pparr = parr;
    pparr[0] == parr[0];
    pparr[0][1] == parr[0][1];

    pparr[0][1]='x'; // "123am"->"x23am" // 与char* pch="123am"的差别???(数组有单独栈存储空间,所以存储每个元素也有单独存储空间,char* pch="123am",pch和"123am"共享存储空间即在内存常量区)

    pparr++; // 指向"456bg"

    printf("%s\n",*pparr); // 输出"456bg"

    printf("%c\n",**pparr); // 输出'4'

    printf("%c\n",*(*pparr+1)); // 输出'5'


char二维数组
    char arr[][4] = {"123","456","789"};
    char (*parr)[4] = arr;
    parr[0] == arr[0];

    parr[0][1] == arr[0][1];

    parr++; // 指向"456"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值