• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語について)

C言語初心者のための関数への多重配列の値の送り方

このQ&Aのポイント
  • C言語初心者のため、関数へ多重配列の値を送る方法を教えてください。
  • 現在は別の1次元配列を作り、そこに一旦コピーしてから関数に送っていますが、他にもっと良い方法はありますか?
  • 配列の左と右に値を指定して、その中の配列を関数に送りたいです。具体的な方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • k_kota
  • ベストアンサー率19% (434/2186)
回答No.1

要するに、3次元配列のうち、1,3番目の要素を固定して1次元配列としたいのですね。 ポインタを使えば、お望みの形式で実現は可能です。 ただ、この書きっぷりだとちょっと早いような気がします。 MATLABだと簡単なんですけどね。 特に事情がなければ2つ目と3つ目を入れ替えれば簡単になります。 要するにint []としてa[x][y]とかとすれば最後の1次元配列だけ渡せます。 それ以外なら、最初から3次元配列として渡すのもありだと思います。 色々ありますが、何回も使うならそれに最適化した関数を作ればいいし、 1回なら気にしないで分かりやすいのを使う。 特定の箇所なら工夫してうまくやるとかですかね。 思いつかないなら、今できる方法で十分とするのもありだと思います。

ringo_072
質問者

お礼

回答ありがとうございます。 >色々ありますが、何回も使うならそれに最適化した関数を作ればいいし、 さっそくやってみたいと思います。 ポインタは、何度か試したのですが、ポインタの理解が浅いために上手く扱えません。(汗 実際は同じような演算を繰り返し行わないといけないので、なるべく処理が少なくなる方法を考えてみたいと思います。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.4

>int data[6000] と int data[10][20][30]が等価 すこし語弊があるので訂正。 int data[6000] = { ... . };と int data[10][20][30] = { { {...}} , ... };です。 また、「等価値」なのであって、 「同じ」ではないので注意してください。 それぞれの、型は異なります。

ringo_072
質問者

お礼

回答ありがとうございます。

すると、全ての回答が全文表示されます。
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

「真ん中の配列」ということですが、 計算結果はどのようなものを望んでいるのでしょうか。。。? 関数に対し、コンパイルエラーのない、 引数を渡す事は簡単ですが期待する計算結果が 間違っている可能性があります。 int data[6000] と int data[10][20][30]が等価であることが 理解できれば、それほど難しくないと思うのですが、 どのような結果を期待しているのか補足して貰えないでしょうか? #numが20と指定されていますが、渡した配列の位置から開始して #20個の合計でいいのでしょうか?

ringo_072
質問者

お礼

回答ありがとうございます。 試行錯誤の結果、メモリ等に問題は残りますが解決できました。 お手数をおかけしました。

すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

配列のサイズが固定なら、こんな書き方もできますが。 int sum(int data[10][20][30],int N,int index1,int index2){ int i,temp=0; for(i=0;i<N;i++){ temp=temp+data[index1][i][index2]; } return(temp); } 呼ぶほうは int output; int a[10][20][30]={適当な数字が入ってるとします。} // この時、配列の左と右に値を指定して、真ん中の配列を関数に送りたいです。 output=sum(a,20,???,???); こんな感じ。

ringo_072
質問者

お礼

回答ありがとうございます。 実際には配列のサイズは場合によって異なります…。 少しメモリがもったいないかもしれませんが、関数内に大きめの配列を用意して、多重配列をすべて送ることで、演算は上手くいきました^^

すると、全ての回答が全文表示されます。

関連するQ&A