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

#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.


下面是测试的图:




展开阅读全文

没有更多推荐了,返回首页