-
1概念的区分
数组指针:数组的指针,首先说它是一个指针,一个指向数组的指针。
指针数组:指针的数组,它是一个数组,数组中存放的内容为指针。
-
2优先级
优先级为 () > [] > *
比如int (*p)[n],因为()的优先级最高,p先于*结合,所以p是一个指针,后面是数组,于是这个就是数组指针。
在如int *p[n],[]优先级比*高,p先与[]结合,所以p是一个数组,前边又有*,所以是指针数组。
-
3看图
-
4看例子
数组指针的例子
#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;
}
指针数组的例子
#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;
}