5
在int (*x)[10];
x
是一個指向10數組int
小號爲什麼這個聲明不起作用
那麼,爲什麼這個代碼不能編譯:
int arr[3] ;
int (*p)[3] =arr;
但這個工程:
int arr[3];
int (*p)[3] =&arr;
在int (*x)[10];
x
是一個指向10數組int
小號爲什麼這個聲明不起作用
那麼,爲什麼這個代碼不能編譯:
int arr[3] ;
int (*p)[3] =arr;
但這個工程:
int arr[3];
int (*p)[3] =&arr;
arr
是一個表達式,其值爲int*
(這是着名的'數組衰減指針'專長URE)。
&arr
是一個表達式,其計算結果爲int (*)[3]
。
數組名稱的「decay」指向數組中第一個元素的所有表達式,除非它們是sizeof
或&
運算符的操作數。對於這兩個操作,數組名稱保留其「數組」(C99 6.3.2.1/3「左值,數組和函數指示符」)。
它不完全相同的理由工作:
int i;
int* pi = i; // error: no conversion from int to int*
+1:我還要指出的是,雖然不同類型的,兩個表達式返回相同的指針地址。 –