2D配列int m [3] [4]があるとしましょう。typedefが次のように定義されている場合
typedef int array[4];
array *ptr = m;
これは何を意味するのでしょうか?4要素の配列へのポインタですか?または4つのポインタの配列?
するとcout << ptr or cout << *ptr
、同じアドレスが出力されます。そんなことがあるものか?
2D配列int m [3] [4]があるとしましょう。typedefが次のように定義されている場合
typedef int array[4];
array *ptr = m;
これは何を意味するのでしょうか?4要素の配列へのポインタですか?または4つのポインタの配列?
するとcout << ptr or cout << *ptr
、同じアドレスが出力されます。そんなことがあるものか?
ptrは、int型の4つの要素の配列へのポインタです。mは、(int型の4つの要素の配列の)タイプの3つの要素の配列です。あなたに絵を与えるために-mは型配列の3つの要素の配列です。これが、ptrがmに初期化される理由です。配列である「m」は、その配列の最初の要素へのポインタに暗黙的に変換されるため、問題はありません。
ptrは、要素の配列へのポインタです。そのポインタが印刷されます。また、* ptrを使用すると、配列の最初の要素へのポインターに暗黙的に変換される配列が得られます。これも同じ開始点であるため、同じ値が得られます。
すべてが同じポイントから始まるので、同じ値を取得しています。ポインタに対して++を実行すると、物事は差別化を開始します。そのままにしておきます。
「時計回り/スパイラルルール」に従って、ptrは4 intの配列へのポインターです。
時計回り/らせんのルールを確認してください。これを読むと、宣言が type-alias へのarray
ポインター、つまり 4 つの整数の配列へのポインターであると読むことができます。