char (* pb)[4] 和 char * pb[4] 的区别(为了避免误导,这里欢迎讨论,不要作为定论!!个人见解,可能会有错误)

来源:互联网 发布:歌手王芳 知乎 编辑:程序博客网 时间:2024/05/24 08:34

#include <stdio.h>int main(){char a[3][4]={"123","456","789"};char (*pa)[4]=a; /*------ right!-------*/char *(pb[10])={NULL,NULL,NULL,NULL,NULL};   /*-------how???-------*//*pa[0]=a;----------------Error!------------*/pb[0]=a[0];printf("pa=%s\npb=%s\n",pa+1,*pb);}

未避免错误,这里欢迎讨论,不要作为定论!!个人见解,下面的结论可能会有错误!!!

char (* pb)[4] -------- 1个空间变量,存储的是指针,指针指向char类型的数组,这个数组的长度是4个字节。

 char * pb[4] ---------4个空间变量,存储的是4个指针,指针指向char类型的数组,这个数组的长度没有限制。

char * pb[4]相当于char * (pa[4])是一个有4个元素的数组,每个元素的类型是char 类型的指针,即指针型数组

char (* pa)[4] 是一个指针变量,它可以指向某个一位长度为4个char的一维数组。即pa++ 表示指针加4和char的长度。也就是左图中pa:DS:FFB8 ,则 pa+1:DS:FFBC。这里的数字4表示所指向“字符数组的长度”

这里也做过测试就是将4改为2,char(*ap)[2]=a,编译时编译器会有警告提示,pa++则FFB8变成FFBA ,*pa会输出3.


下面是测试的图:




0 0
原创粉丝点击