个人理解仅作参考,如 有不对请指出;
指针数组:
如:char *p1[3];表示声名了个数组,数组是3个char *型指针。
说直白点,一个数组中装的全是同种类型的指针。
数组指针:
如:char (*p1)[3];表示声名了个指针,他指向一有3个char型元素的地址。
说直白点,是指向同类型2维数组的指针。且包含的元素的个数是相同的。
就是说char (*p1)[3]是指向a[][3]的指针,不能是a[][4]或a[][2]。
例子:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[2][3] = {"a1","b2"};
char (*p2)[3] = NULL;
p2 = a;
printf("%s/n",p2); //a1
printf("%s/n",p2+1); //b2
printf("%c/n",p2[0][0]); //a
printf("%c/n",(*p2)[1]); //1
printf("%c/n",(*(p2+1))[0]); //b
printf("%c/n",(*(p2+1))[1]); //2
printf("%s/n",(*(p2+0))); //a1
printf("%s/n",(*(p2+1))); //b2
printf("%c/n",*((*(p2+0))+0)); //a
printf("%c/n",*((*(p2+0))+1)); //1
printf("%c/n",*((*(p2+1))+0)); //b
printf("%c/n",*((*(p2+1))+1)); //2
return 0;
}
指针数组:
如:char *p1[3];表示声名了个数组,数组是3个char *型指针。
说直白点,一个数组中装的全是同种类型的指针。
数组指针:
如:char (*p1)[3];表示声名了个指针,他指向一有3个char型元素的地址。
说直白点,是指向同类型2维数组的指针。且包含的元素的个数是相同的。
就是说char (*p1)[3]是指向a[][3]的指针,不能是a[][4]或a[][2]。
例子:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[2][3] = {"a1","b2"};
char (*p2)[3] = NULL;
p2 = a;
printf("%s/n",p2); //a1
printf("%s/n",p2+1); //b2
printf("%c/n",p2[0][0]); //a
printf("%c/n",(*p2)[1]); //1
printf("%c/n",(*(p2+1))[0]); //b
printf("%c/n",(*(p2+1))[1]); //2
printf("%s/n",(*(p2+0))); //a1
printf("%s/n",(*(p2+1))); //b2
printf("%c/n",*((*(p2+0))+0)); //a
printf("%c/n",*((*(p2+0))+1)); //1
printf("%c/n",*((*(p2+1))+0)); //b
printf("%c/n",*((*(p2+1))+1)); //2
return 0;
}