<pre name="code" class="cpp">#include<cstdio>
int main()
{
char c[][4] = {"123","456","789"}; //数组指针 (二维数组)
char (*p)[4]; //数组指针
p=c;
//一个指针 指向一个 至多有4个字符 的 字符串数组 该数组保存在栈区
//该字符串数组的内存空间已经分配好了 而且这些字符在 内存空间中是连续的
char *pch[6] = {"123","456","789"}; //指针数组
//一个数组 保存6个指针 每个指针指向一个常量区字符串
//相同点:
//指针数组 和 数组指针 的 元素 都可以通过 解引用 和 下标运算 得到
for(int i=0; i<3; i++)
printf("%s %s\n", p[i], *(p+i));
printf("\n");
for(int i=0; i<3; i++)
printf("%s %s\n", pch[i], *(pch+i));
printf("\n");
// 不同点1 :
// 一个的字符串保存在栈区 一个保存在常量区
// 常量区的值不可修改
printf("修改前: %s\n", p[0]);
p[0][0] = '6'; //正确
printf("修改后: %s\n\n", p[0]);
pch[0][0] = '2'; //错误
//常量区的值不可修改
// 不同点2:
p[1] = "22"; //错误
//禁止这样修改
//因为修改后可能导致字符串数组长度改变
//整个二维数组的内存就不再是连续的了
printf("修改前: %s\n", pch[0]);
pch[0] = "666"; //正确
//该指针指向一个新的 常量区字符串
printf("修改后: %s\n\n", pch[0]);
printf("%s\n", pch[0]);
return 0;
}
数组指针和指针数组 原理 及 异同
最新推荐文章于 2023-09-13 17:35:56 发布