関数に3次元配列を渡したいです

[戻る]
Puppy 2002/05/03(金) 11:31:56
Puppyです。こんにちは。
先日は2次元配列で苦しみました。(まだよくわかってません)
現在は3次元配列で悩んでいます。(涙)

char aryS[2][3][4];
char aryD[2][3][4];

MoveData(aryS[1][0][0], aryD[1][0][0]); 

void MoveData(char *pS[][4], char *pD[][4])
{
  // この中でarySからaryDに内容をコピーしたい
}
これだと、変換できないというエラーが出ます。

どのように定義したらいいでしょうか?
昨日ずっと考えたんですけど、どうやってもエラーがとれません。
ギブアップ && 涙 ですぅ。
根本的にしくみから理解したいので、よろしくお願いします。m(..)mぺこり

YuO [E-Mail] 2002/05/03(金) 11:49:17
>先日は2次元配列で苦しみました。(まだよくわかってません)
>現在は3次元配列で悩んでいます。(涙)

2次元配列がわらかないのなら,3次元配列がわかるわけないと思うんですけどね……。

まずは,配列とポインタの違いをきっちり理解することです。
次に,配列がポインタに変換される規則を理解することです。
それらがPuppyさんに欠けていることですから。


細かい説明抜きに書くと,
ある関数funcにintのn次元配列var[a_1][a_2][a_3]…[a_n]を引数としてもらいたい場合,
funcでは,void func(int var[][a_2][a_3]…[a_n]);と書きます。
#int var[a_1][a_2][a_3]…[a_n]と書いてもよい
ただし,int var[][][a_3]…[a_n]のように,最高次以外を省略することはできません。

で,呼び出し側で,
int var2[a_1][a_2][a_3]…[a_n];
という変数を渡したいとき,func(var2);
と書きます。

ポインタ使った表記(void func(int (*var)[a_2][a_3]…[a_n]))は,
混乱の原因になるのでやめておいた方がよいでしょう。

Puppy 2002/05/03(金) 12:37:38
[[解決]]
おそわった方法でできました。
本当にありがとうございました。

もっと勉強します。

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