鍍金池/ 問答/數(shù)據(jù)分析&挖掘  C  網(wǎng)絡安全/ int arr[5] ; int (*p)[5] = &arr; 為什么

int arr[5] ; int (*p)[5] = &arr; 為什么*p得到的是arr的地址?

int arr[5] = {1,2,3,4,5};
int (*p)[5] = &arr;
printf("p:%p\n",p);
printf("*p:%p\n",*p);

結果是 p = *p = arr = 0x7ffee517c830
圖片描述

問題就是 *pa 為什么是一個地址。pa 是定義為 int (*pa)[SIZE],它指向一個數(shù)組,這里到底指向的是數(shù)組的第一個元素,還是指向整個數(shù)組一個無形的保護殼。但*pa 是int [SIZE] 類型的,理論上它應該是一個數(shù)組類型,所以pa指向的是一個數(shù)組(廢話),關鍵是不是指向數(shù)組的第一個元素,如果是的話,按照解引用操作的話,它應該是取出pa里面的地址,然后再到這個地址中取出那個值。那也應該取出1來了啊。

到底是怎么回事?

回答
編輯回答
青檸
int (*p)[5] = &arr;

你就可以理解成 *p 是 arr 的別名,也就是 p 的值等于 &arr。
所以你想要通過 p 獲取數(shù)組的值,需要 *(*p),這是第一個元素,第二個元素 *(*p + 1) 以此類推。

2017年4月15日 09:36