C語言中數組指針與指針數組的理解

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章