重複の可能性:
C ++で配列を使用するにはどうすればよいですか?
次のコードスニペット:
int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
a [i]、a [i] [j]の答えはどうなりますか。ここで、i<=1およびj<=2です。a[i][j][k]の動作を理解するのに問題はありません。上記のインデックス作成はどのように機能するのか説明してください。
重複の可能性:
C ++で配列を使用するにはどうすればよいですか?
次のコードスニペット:
int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
a [i]、a [i] [j]の答えはどうなりますか。ここで、i<=1およびj<=2です。a[i][j][k]の動作を理解するのに問題はありません。上記のインデックス作成はどのように機能するのか説明してください。
私はあなたの問題が何であるか完全にはわかりませんが、私はあなたに索引付けを説明しようとします:
この例で作成するのは、3次元配列(または、必要に応じてネストされた配列)です。
次のような単純な配列を理解していると思います
---x---
int a[3] = {1, 2, 3};
これで、要求a[x]
すると、xが配列のどの位置を選択するかを決定します。
2次元配列は、単なる配列の配列です。
---------y--------
---x--- ---x---
int b[2][3] = {{1, 2, 3}, {4, 5, 6}};
要求b[y][x]
すると、yは2つの1次元配列のどちらを選択するかを決定し、xはその配列のどちらの位置を示します。
3次元配列は、これを1レベル高くしているだけです。配列の配列の配列
----------------------z--------------------
---------y--------- ---------y---------
---x--- ---x--- ---x--- ---x----
int c[2][2][3] = {{{1, 2, 3}, {4, 5, 6}}, {{1, 2, 3}, {4, 5, 6}} };
ここで、の要求c[z][y][x]
はz番目の2d配列に移動し、次にその2d配列のy番目の1d配列に移動し、次にこの配列のx番目の位置に移動します。
配列への要求c[z]
またはc[z][y]
その結果として生じるのは配列のアドレスのみであり、実際のint値は生成されません。
a[i]とa[i][j]はアドレスであり、で指定された値とは関係ありませんint a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
。つまり、a [1] -a [0]は、aが指す2番目の配列と最初の配列の間のバイト数です。
a[0] = {{1,2},{9,8},{3,7}}
a[1] = {{2,2},{1,4},{5,4}}
a[0][0] = {1,2}, a[0][1] = {9,8}, a[0][2] = {3,7}
a[0][0][0] = 1, a[0][0][1] = 2, a[0][1][0] = 9, a[0][1][1] = 8, a[0][2][0] = 3, a[0][2][1] = 7
a[1][0] = {2,2}, a[1][1] = {1,4}, a[1][2] = {5,4}
a[1][0][0] = 2, a[1][0][1] = 2, a[1][1][0] = 1, a[1][1][1] = 4, a[1][2][0] = 5, a[1][2][0] = 4
ここで覚えておかなければならないのは、作業しているオブジェクトが2つあるということです。
a[i][j][k]
と
a[i][j], a[i] and a
最初はintで、他の3つはポインターです
関連するメモリは次のようになります。
a : | a[0] | a[1]|
\/ \______________________
a[] : | a[0][0] | a[0][1] | a[0][2] | a[1][0] | a[1][1] | a[1][2] |
\/ \______________
a[][] : | a[0][0][0] | a[0][0][1] | a[0][1][0] | a[0][1][1] | ...
等々...
ここで、この例では、ポインターを使用して算術演算を実行します。a[1] - a[0] = 3
。2つのポインタの間に3つのメモリ位置があることがわかるウィットに関連付けられたメモリを見ると、結果は3になります。