三次元配列 – プログラミング – Home

通知
すべてクリア

[解決済] 三次元配列


ろろ
 ろろ
(@ろろ)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

Q = p[ a*3*9 + b*9 + c ];


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

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


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

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

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


返信引用
ろろ
 ろろ
(@ろろ)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

皆さん、早速試したらうまくいきました
ありがとうございました


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました