2

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

int a[2];
printf("%u %u", (int)(&a), (int)(a));

&aのアドレスを指すポインタだと思いますa。2 つ目aは、配列の先頭アドレスを意味します。

なぜ同じなのですか?

4

3 に答える 3

7

&単項演算子または演算子のオペランドである場合を除いて、どのコンテキストでもsizeof、配列名は配列aの最初のメンバーへのポインターに評価されます。これには型がありint *ます。

では&aaは配列自体を指定するため、配列&aのアドレスも指定します。これには型があります。int (*)[2]

配列の最初の要素は配列の先頭にあるため、配列のアドレスと最初の要素のアドレスは必然的に一致するため、同じ値が表示されます。

(実際には、%pフォーマット指定子を使用してポインターを出力する必要があります)。

于 2012-10-13T06:29:01.647 に答える
2

これは、それらがすべて同じアドレスを指しているからです。

  • &aのアドレスですa
  • a配列自体です(その先頭)
  • &a[0]最初の要素であるため、同じアドレスでもあります

したがって、これらの例を常に にキャストするとintaのアドレスになります。a型キャストが正しく行われた場合、配列の最初の要素は常に最初の要素を指すため、配列の最初の要素は常にその最初の要素を指します。

于 2012-10-13T06:27:36.210 に答える
0

&a定数である配列のベースアドレスです。またa、最初の要素を保持します。

于 2012-10-13T06:27:08.857 に答える