#include<stdio.h>
int main(void) {
int arr[3]={1,2,3};
return 0;
}
現在*(&arr)
會給我什麼,爲什麼?我想要一個詳細的解釋。不要只是告訴我如何取消*
和&
:P引用地址?
我想知道編譯器如何解釋此表達式以給出所需的結果。
#include<stdio.h>
int main(void) {
int arr[3]={1,2,3};
return 0;
}
現在*(&arr)
會給我什麼,爲什麼?我想要一個詳細的解釋。不要只是告訴我如何取消*
和&
:P引用地址?
我想知道編譯器如何解釋此表達式以給出所需的結果。
&arr
創建一個指向該數組的指針 - 它的類型爲int (*)[3]
,並指向數組arr
。
*&arr
解除引用指針 - 它是數組本身。現在,現在發生的事情取決於你用它做了什麼。如果使用*&arr
如任一sizeof
或&
運營商的主題,則它分別給出陣列的大小或地址:
printf("%zu\n", sizeof *&arr); /* Prints 3 * sizeof(int) */
但是,如果在任何其他上下文中使用它,然後將其作爲評價一個指向它的第一個元素:
int *x = *&arr;
printf("%d\n", *x); /* Prints 1 */
換句話說:*&arr
行爲酷似arr
,如你所願。
好吧,如果我說printf(「%d」,* &arr);它只是給了我&arr [0],第一個元素的地址,當你說它創建一個指針時,它是物理創建的嗎? – n0nChun 2010-09-05 10:10:38
它「創建它」的方式與評估'2 + 3''創建'int'值'5'相同。 – caf 2010-09-05 10:16:51