考慮一下:在C中,數組中第一個元素的地址是否與數組的地址相同?
int i[50];
void *a = i; //i.e. = &i[0]
void *b = &i;
將a == b
始終是真實的,還是有平臺/編譯器在那裏,這可能並不總是正確?
考慮一下:在C中,數組中第一個元素的地址是否與數組的地址相同?
int i[50];
void *a = i; //i.e. = &i[0]
void *b = &i;
將a == b
始終是真實的,還是有平臺/編譯器在那裏,這可能並不總是正確?
是,標準(相等運算符)第6.5.9說:
兩個指針比較相等,如果......兩個 都指向同一個對象 (包括一個指向對象, 一個在其開始的子對象)
是,價值投給void*
是一樣的...但原來的類型不是。
具有
int arr[100];
值arr
,當它衰減到一個指向它的第一元件,具有類型*int
;
值&arr
具有類型int (*)[100]
在這種特定情況下,是A和B兩者將被報告爲同一的,因爲所討論的陣列是一維。僅供參考 - 如果這是一個二維或更高維的陣列,這不是真的嗎?在這種情況下閱讀更多關於指向數組的指針。很好理解的概念,但更好地避免維護良好的代碼可讀性。
聽起來很有說服力。爲了完整性,我們是否安全地假設數組元素被視爲數組的子對象? (我通常只將這個概念視爲適用於結構成員。) – 2011-06-09 09:26:03
@Oli:數組定義如下:一個數組類型描述了一個連續分配的非空對象集合,其中包含一個特定成員對象類型 ,稱爲元素類型' 。 – 2011-06-09 09:51:46