2013-07-15 27 views
1

例如之間的區別,我有什麼是一個malloc()的返回值和數組名

char* c=(char *)malloc(100*sizeof(char)); 
printf("0x%x,c); 
printf("0x%x,&c); 

,這將顯示c&c不同的值。

然而,如果讀音字具有下列:

char d[100]; 
printf("0x%x,d); 
printf("0x%x,&d); 

這表明的d&d值是相同的。

第一個代碼怎麼會給我不同的結果c&c

+0

您是不是要在malloc上聲明'char * c'而不是? –

+0

@ChrisO ya,這是一個錯字。謝謝。我糾正了它。 – henryyao

+0

閱讀:[sizeof(&arr)返回什麼?](http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499)解釋'd','&d'之間的區別 –

回答

6

一個數組在一個函數調用中衰減到一個指向其第一個元素的指針。它不是當它是一元&(地址)運算符的操作數時會衰減。這意味着d&d在您的示例中產生相同的地址,但具有不同的類型。 char *char (*)[100],分別在你的情況。

相反,c是一個指針。當你的地址是&時,你會得到指針變量的地址,而不是直接使用c,這會給你指向的地址。 cchar *,並且&cchar **

編者按:使用%p來打印指針類型。 %x用於unsigned int,並且unsigned int可能與指針的大小不同。更正後的代碼可能如下所示:

printf("%p\n", (void *)c); 
相關問題