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 arr[][4] = {"123","456","789"};
char (*parr)[4] = arr;
parr[0] == arr[0];
parr[0][1] == arr[0][1];
parr++; // 指向"456"