1.概念的区分:
数组指针:数组的指针,首先说它是一个指针,一个指向数组的指针。
指针数组:指针的数组,它是一个数组,数组中存放的内容为指针。
2.优先级的不同:
优先级为 () > [] > *
比如int (p)[n],因为()的优先级最高,p先于结合,所以p是一个指针,后面是数组,于是这个就是数组指针。
在如int p[n],[]优先级比高,p先与[]结合,所以p是一个数组,前边又有*,所以是指针数组。
3看图

4.举例说明:
(1).数组指针的例子
#include <stdio.h>
int main(void) {
int arrP[5] = {1,2,3,4,5};//定义一个数组并赋值
int (*p)[5] = &arrP;//定义一个数组指针并为其赋值
printf("%p\n",arrP);//数组名为数组首元素的地址 与 &arrP[0] 等价
printf("%p\n",p);//p为arrP的地址 及 &arrP,注意:虽然arrP与&arrP值相同,单代表的意思却不一样,类型却不同。arrP代表首元素的地址,&arrP代表数组的地址。
printf("%p\n",*p);//*p代表arrP,所以这个表示arrP首元素的地址
printf("%d\n",**p);//既然*p代表首元素的地址,**p为求这个地址上的值
printf("%d",(*p)[1]);//*p为arrP,所以(*p)[1]就是arrP[1]的值
return 0;
}
(2).指针数组的例子
#include <stdio.h>
int main(void) {
int x = 100;
int y = 200;
int *p[2];//定义一个指针数组
p[0] = &x;
p[1] = &y;
printf("%p\n",p[0]);//x的地址
printf("%p\n",&x);//x的地址
printf("%d",*p[0]);//x的值
return 0;
}
336

被折叠的 条评论
为什么被折叠?



