三次元配列

[戻る]
ろろ 2006/07/19(水) 15:50:35
3次元配列について質問です
下のプログラムを見てください。
testという3次元配列があり初期値を0〜80まで
設定しています。−(1)
次にintのポインタに強引にtestを格納してます。−(2)
ここで質問です。ポインタpとa,b,cの値を使って
test配列にアクセスする方法が知りたいです。
(3)のようにしてみましたが欲しい値が取れませんでした。
欲しい値が取れるような書き方を教えてください。
よろしくお願いします。VC6を使ってます。

//(1)ここからプログラム
int    test[3][3][9];
int    i,j,k,*p,Q,a,b,c;

for( i = 0; i < 3; i++ )
{
  for( j = 0; j < 3; j++ )
  {
    for( k = 0; k < 9; k++ )
    {
      test[i][j][k] = i*3*9 + j * 9 + k;
    }
  }
}

//(2)
p = (int*)test;

//(3)
a = 0;b = 1;c = 2;
Q = (&(&p[a])[b])[c];//3がQに入る、欲しいのは11

επιστημη 2006/07/19(水) 16:05:44
 Q = p[ a*3*9 + b*9 + c ];

REE 2006/07/19(水) 16:09:13
test[a][b][c]    素直に元の配列を使う
*(p+a*3*9+b*9+c)  データの並びを意識して位置を計算する 
((int(*)[3][9])p)[a][b][c]  正しいポインタ型にキャストする

tetrapod 2006/07/19(水) 16:09:36
p はただの int* ですから、もはや p は配列の要素数を知りません。
なので配列の要素数を知っているプログラマが手計算しなければなりません。
p[a*3*9 + b*9 + c] とすれば目的は達せられるでしょう。
配列の要素数を変更する場合にはここの 3 や 9 も変更する必要が生じます。

提示コードは単に p[a+b+c] と書いたのと同じことなので 3 が得られるのは当然。

ろろ 2006/07/19(水) 16:13:39
[[解決]]
皆さん、早速試したらうまくいきました
ありがとうございました

古いスレッドには追加発言できません。