実際には、整数の配列を定義しています。それは整数の配列へのポインタに崩壊することができますが、ではなく、は整数のポインタへのポインタに崩壊します。
それはあなたのメモリレイアウトを描く場合に役立ちます。
int (*pa)[2] = a;
+---------+---------+---------+---------+
| pa[0] | pa[1] |
+---------+---------+---------+---------+
| 1 | 2 | 3 | 4 |
+---------+---------+---------+---------+
注方法sizeof(*pa) = 2 * sizeof(int)
:あなたは、それはへのポインタの配列-の整数に崩壊させた場合
+---------+---------+---------+---------+
| a[0][0] | a[0][1] | a[1][0] | a[1][1] |
+---------+---------+---------+---------+
| 1 | 2 | 3 | 4 |
+---------+---------+---------+---------+
を。これらの各値は、決してポインタへのポインタに、整数へのポインタに崩壊することができます:あなたは、整数へのポインタに虫歯へのポインタの配列-の整数をキャストすることができ、とにかく
int *p = pa[0];
と
int *p = (int*)a;
std::cout << p[3] << std::endl;
std::cout << *(p + 3) << std::endl;
メモリは次のようになります:
+---------+---------+---------+---------+
| p[0] | p[1] | p[2] | p[3] |
+---------+---------+---------+---------+
| 1 | 2 | 3 | 4 |
+---------+---------+---------+---------+
しかし、あなたがint**
にそれをキャストする場合は、理由は私には、意味のない値を取得します四つの値に直接アクセスしますmoryポインタはなく、整数だけです。
可能な複製を使用することができます-pointer](http://stackoverflow.com/questions/8203700/conversion-of-2d-array-to-pointer-to-pointer) – smead
コンパイルするには、そのコードに不適切なキャストを壊す必要があったあなたの最初のヒントが間違っている。 – WhozCraig