array
、値のコンテキストでは、はタイプint *
であり、ポインタは配列の最初の要素を指します。&array
、は「の配列[3]へのポインタ」型でありint
、全体を指しarray
ます。 &array[0]
はタイプint *
であり、配列の最初の要素を指します。
したがって、値コンテキストで使用される場合は、&array[0]
と同じです。値のコンテキストで使用されない1つの状況は、演算子です。だから:とは異なります。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