2012-10-13 62 views
1

可能重複:
C: How come an array’s address is equal to its value?方式來引用數組

可能有人也許幫我解釋一下陣列腐爛?具體而言,我感到困惑1)如何陣列指本身,以及2)是真的,當我定義

int array[] = { 45, 67, 89 }; 

然後陣列,&陣列,以及&陣列[0]都指這個數組?我發現它們在打印時顯示爲相同的輸出,但它們是否也指內存中完全相同的東西?

回答

2

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 */ 

參見:http://web.torek.net/torek/c/pa.html

8

then array,& array和& array [0]都指向這個數組?

內存位置將是相同的,但類型會有所不同。

  • array就是:3點的整數
  • &array陣列已經鍵入int (*)[3],一個指針數組
  • &array[0]已鍵入int *,一個指針到一個整數
0

它們所有參考相同的內存位置,但有點不同。 array&array表示從第一個元素的地址開始的整個數組,而&array[0]僅引用數組中的第一個元素。