- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2次元配列とポインタの引数受け渡しについて)
2次元配列とポインタの引数受け渡しについて
このQ&Aのポイント
- 2次元配列とポインタの引数受け渡しについて、効率的な方法はあるのか悩んでいます。
- 関数に渡す2次元配列のサイズが異なる場合、どのように対応すれば良いのかわかりません。
- 現在は引数のサイズを合わせた関数を作成していますが、他にもっと効率的な方法があるのでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ああそうだ, 引数の順番はどうしても unsigned char *a, int y, int x じゃないとダメ?
その他の回答 (4)
- akayoroshi
- ベストアンサー率50% (46/91)
回答No.5
警告を消したいだけなら void func(void *aa, int y, int x) { unsigned char *a=(unsigned char*)aa; 以下変更なし とすればできます。
質問者
お礼
回答ありがとうございます。 なるほど、voidへのポインタ型で一度受け取るという方法もあったんですね。 今回はvoid func(int x, int y, unsigned char a[y][x])という方法で進めることにしましたが、勉強になります。 ありがとうございました。
- colder
- ベストアンサー率43% (30/69)
回答No.4
引数の順番を変えてもいいなら void func(int y, int x, unsigned char a[x][y]) かな。(C++では不可、C99以降限定)
質問者
お礼
回答ありがとうございます。 やはり引数をポインタで書くよりは配列の方が見やすく、どのような大きさのものが必要かもすぐにわかるためいいですよね。 こちらを使わせていただきます。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.2
「先頭要素のアドレス」なら &a[0][0] だよね. それはそれとしてちょっと注意が足りないかな.
- wormhole
- ベストアンサー率28% (1626/5665)
回答No.1
>もちろんこれでも動くのですが、やはりこういう書き方はルールにはないので、コンパイルで警告が出ます。 それがプログラマ側で意図した使い方であって、そのような警告が出ることがわかってたなら問題はないです。 警告を出したくないなら出ないように対策すればいいだけですし。
質問者
お礼
回答ありがとうございます。 必ずだめというわけではないんですね。 なるほど、警告の対策の仕方はまた調べてみます。
補足
No.2、No3の回答ありがとうございます。 確かに2次元配列の先頭アドレスを&演算子を使って送ればよかったですね…。 引数の順番は変えても問題ないです。 今試してみたらできました、順番変えてもできるとは気づかなかったです。 実際、関数内でポインタの演算によってやるのではなく、配列の方が見やすいためにそれでできる方法はないかと探っていました。 &a[0][0]か引数の順番を変えることによってやりたいと思いますが、どちらがいいでしょうか。 といってもどちらも変わりはしないのですが・・・。