C ++では、配列の名前は配列の最初の要素への単なるポインターであることを私は知っています。例えば:
int foo[5];
=> fooはint型のポインタであり、配列の最初の要素であるa[0]を指します。
しかし、それでは、これがあります。
int (*foo)[5]
ここで、fooは型の配列へのポインターです。では、fooは(int型の)ポインターへのポインターですか?
これは5つのintの配列です。
int a[5];
これは、5つのintの配列へのポインタです。
int (*p)[5] = &a;
これはintへのポインタです:
int * q = a; // same as &a[0]
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ビット環境では、これは期待どおりにとを出力 します。4
20