私はC++を初めて使い、2D配列に対してどのようにメモリが割り当てられるかを理解しようとしています。C++での2D配列のメモリ割り当て
これらの答え連続メモリの割り当ては、同様に、通常の配列のためのような2次元配列のために起こることを言います。私はそれが私の予想外の結果が得られることをやろうとしているとき、*(array + (i * ROW_SIZE) + j)
を使用してarray[i][j]
番目の要素にアクセスすることができるはずですが2言及回答(私が間違っているなら、私を修正)。
コード:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int array[2][2] = { {1, 2}, {3, 4} };
cout<<*((array+1*2) + 1)<<endl;
cout<<**((array+1*2) + 1)<<endl;
return 0;
}
結果:
0x76e1f4799008
2012576581
それは私array[i][j]
番目の要素を与えるものではありません。その解決法が間違っているかどうか、あるいは私が以前の答えを誤解しているかどうか、何が起こっているのかを説明することができますか?
ええ、そうですが、その解は '(array +(i * ROW_SIZE)+ j)'と等しくはありません。 '(array +(i * ROW_SIZE)+ j)'が間違っているのか、何か間違っているのかどうか知りたい。 – e11438
この答えは、 '配列の配列はポインタへのポインタと同じではありません。 'http://stackoverflow.com/a/21580967/4384418 – e11438