可能重複:
C: How come an array’s address is equal to its value?方式來引用數組
可能有人也許幫我解釋一下陣列腐爛?具體而言,我感到困惑1)如何陣列指本身,以及2)是真的,當我定義
int array[] = { 45, 67, 89 };
然後陣列,&陣列,以及&陣列[0]都指這個數組?我發現它們在打印時顯示爲相同的輸出,但它們是否也指內存中完全相同的東西?
可能重複:
C: How come an array’s address is equal to its value?方式來引用數組
可能有人也許幫我解釋一下陣列腐爛?具體而言,我感到困惑1)如何陣列指本身,以及2)是真的,當我定義
int array[] = { 45, 67, 89 };
然後陣列,&陣列,以及&陣列[0]都指這個數組?我發現它們在打印時顯示爲相同的輸出,但它們是否也指內存中完全相同的東西?
array
,在值上下文中是類型int *
,指針指向數組的第一個元素。 &array
,類型是「指向數組[3] int
」,並指向整個array
。 &array[0]
類型爲int *
,並指向數組的第一個元素。
所以,&array[0]
相同array
,如果array
在值上下文使用。 array
未在值上下文中使用的一種情況是sizeof
運算符。所以:sizeof array
將不同於sizeof &array[0]
。
讓我們舉個例子:
int array[] = { 45, 67, 89 };
int *pa = array; /* pa is now pointing to the first element of "array" */
int *pb = &array[0]; /* pb is also pointing to the same */
int (*pc)[3] = &array; /* pc points to the whole array.
Note the type is not "int *" */
printf("%zu\n", sizeof &array[0]); /* prints size of an "int *" */
printf("%zu\n", sizeof array); /* prints 3 times the size of an int */
printf("%zu\n", sizeof &array); /* prints size of pointer to an array[3] of int */
then array,& array和& array [0]都指向這個數組?
內存位置將是相同的,但類型會有所不同。
array
就是:3點的整數&array
陣列已經鍵入int (*)[3]
,一個指針數組&array[0]
已鍵入int *
,一個指針到一個整數它們所有參考相同的內存位置,但有點不同。 array
和&array
表示從第一個元素的地址開始的整個數組,而&array[0]
僅引用數組中的第一個元素。