数组指针和指针数组 原理 及 异同

来源:互联网 发布:网络电视tv版哪个好 编辑:程序博客网 时间:2024/06/14 20:08
<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;}


                                             
0 0
原创粉丝点击