• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列のポインタについて)

C言語の配列ポインタについて

このQ&Aのポイント
  • C言語で関数の引数によってデータを代入する配列を切り替える方法について教えてください。
  • 配列のポインタを使って、if文の中やfor文でどのように処理をすれば良いかアドバイスしてください。
  • C言語で配列のポインタを使って複数の配列を処理する方法を教えてください。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>int a[100][150]; >int b[100][150]; int型の二次元配列ですが… >unsigned short *buff; unsigned short型へのポインタで本当に大丈夫ですか? sizeof(int) == sizeof(unsigned short)の環境でないと変にメモリ破壊を招くことになりますが……。 >for( j=0 ; j<100 ; j++ ){ > for( i=0 ; i<150 ; i++ ){ >  buff[y][x] = data; >  x++; > } > x = 0; > y++; >} このループの開始時のxとyの値はどうなっているのでしょうか? 特に理由がないのであれば、ループカウンタに使っているiとjで buff[j][i] = data; としてよいかと思われますがどうでしょう? 最初の型の問題を除けば、そのまま動作するかと思われます。 >buff = &a; >buff = &b; は、それぞれ buff = &a[0][0]; buff = &b[0][0]; の方がよいかも知れませんが…。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

int (*buff)[150]; って方針もあることはある. しかし, x や y はどこにあるんだろう.

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

おおぅ……… #2さんの指摘通り…ですね。 サイズ不明では次が指せない……。 *(buff + y * 150 + x) = data; とか。 毎回演算させる羽目になりますな。 # ある程度は最適化されるかも知れませんけど……。

回答No.2

> buff[y][x] このように使いたいのであれば、ポインタの型としてxの部分の要素数(今回の場合は150)を指定しておかないとけいないでしょう。 でないと、buff[1][0]としたときにbuff[0][0]からどれだけ先にある要素を示しているのかがコンパイラにはわかりませんし、今の型ではbuff[0]が既にunsigned shortなので、それに[0]とか指定すると「配列ではないものに添え字がつけられた」とエラーになるはずです。

関連するQ&A

専門家に質問してみよう