-
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;
}