2013-07-16 47 views
-2

程序員的輸出:指向自己的整數數組的起始地址?

#include<stdio.h> 
int main(){ 
int A[3] = {1,2,3}; 
printf("%u %u %u ",&A,A,*A); 
return 0; 
} 

是:3216303812 3216303812 1

這裏& A和A是相同的,這意味着地址作爲即A的值是指向本身是相同的。和*存儲在3216303812的平均值是A本身,因爲我們知道& A = A ..所以1來自哪裏?怎麼來* A = 1?請幫助

+7

重複數百次以上。 –

+1

...但我投票認爲是一個愚蠢的人不是一個。繁忙的使用返回鍵讓我。 –

回答

5

A是指向該陣列的第一個元素的指針,即它等於&A[0]

&A是指向整個陣列

當然這些地址具有相同的值,因爲數組的第一個元素的地址與數組的地址相同。但是它們有不同的類型A產生一個指向int的指針,而&A是一個指向int數組的指針。

+0

感謝卡爾,其實我想了解相同的內存安排,因爲A是數組的起始地址,所以理想的內存安排應該是類似的,在3216303812 - > 1(i,e * A),在3216303816→2(即*(A + 1))並且在3216303812→3(即*(A + 2))。但* A相當於*(3216303812),我在內存地址3216303812處看到我們有A,因爲&A = 3216303812,而A是3216303812,所以* A應該是3216303812.請糾正我在哪裏出錯。 – user2588495

+0

@ user2588495:再次閱讀上面的答案,仔細理解 - 即使它們具有相同的*值*(地址),'A'和'&A'也是不同*類型*。 –

0

A表示&A[0],所以*A等於數組中第一個元素的值,因此輸出爲1