3

C ++では、配列の名前は配列の最初の要素への単なるポインターであることを私は知っています。例えば:

int foo[5];

=> fooはint型のポインタであり、配列の最初の要素であるa[0]を指します。

しかし、それでは、これがあります。

int (*foo)[5]

ここで、fooは型の配列へのポインターです。では、fooは(int型の)ポインターへのポインターですか?

4

2 に答える 2

5

これは5つのintの配列です。

int a[5];

これは、5つのintの配列へのポインタです。

int (*p)[5] = &a;

これはintへのポインタです:

int * q = a;  // same as &a[0]
于 2012-10-17T03:37:14.903 に答える
2

C ++では、配列の名前は配列の最初の要素への単なるポインタです

それは正しくありません。配列の名前は「無料」で対応するポインタ型に変換できますが、それは間違いなくポインタではありません。わかりやすい最も簡単な方法は、ポインタと配列のサイズを比較することです。

int foo[5];
int *ptr;
cout << sizeof(foo) << endl;
cout << sizeof(ptr) << endl;

2番目の例は、intサイズ5のsの配列へのポインターです。

cout << sizeof(foo) << endl;
cout << sizeof(*foo) << endl;

32ビット環境では、これは期待どおりにとを出力 します。420

于 2012-10-17T03:37:36.990 に答える