1

重複の可能性:
C:配列のアドレスがその値と等しいのはなぜですか?

誰かが私がアレイの減衰を説明するのを手伝ってくれるでしょうか?具体的には、1)配列がそれ自体をどのように参照するか、2)を定義するときに、それは本当であるかについて混乱しました。

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

次に、array、&array、および&array [0]はすべてこの配列を参照しますか?印刷すると同じ出力として表示されることがわかりましたが、メモリ内のまったく同じものを参照しているのでしょうか。

4

3 に答える 3

8

次に、array、&array、および&array [0]はすべてこの配列を参照しますか?

メモリの場所は同じですが、タイプは異なります。

  • arrayそれはまさにそれです:3つの整数の配列
  • &arrayタイプint (*)[3]、配列へのポインタがあります
  • &array[0]タイプint *、単一の整数へのポインタがあります
于 2012-10-13T05:30:09.337 に答える
2

array、値のコンテキストでは、はタイプint *であり、ポインタは配列の最初の要素を指します。&array、は「の配列[3]へのポインタ」型でありint、全体を指しarrayます。 &array[0]はタイプint *であり、配列の最初の要素を指します。

したがって、値コンテキストで使用される場合は、&array[0]と同じです。値のコンテキストで使用されない1つの状況は、演算子です。だから:とは異なります。arrayarrayarraysizeofsizeof arraysizeof &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

于 2012-10-13T05:33:35.100 に答える
0

それらはすべて同じメモリ位置を参照しますが、少し異なります。arrayそして&array、最初の要素のアドレスから始まる配列全体を参照しますが&array[0]、配列内の最初の要素のみを参照します。

于 2012-10-13T05:32:15.157 に答える