• ベストアンサー

ポインタ配列について

struct AAA{ char *aaa; char *bbb; }; main(){ struct AAA *BBB[36]; ... rtn = sub(BBB); ... rtn = subsub(BBB); } void sub(*BBB[36]){ ... for(i=0; i<3; i++){ BBB[i] = (struct AAA*)malloc(sizeof(struct AAA)); } ... } void subsub(*BBB[36]){ ... for(i=0; i<3; i++){ printf("[%s]\n", BBB[i]->aaa); } ... } このような流れのプログラムを組みたいです。 *BBB[36]に値を設定してその値を使うプログラムです。 "struct AAA"の内容を大量に受信するので*BBB[36]としました。 sub()、subsub()の引数の書き方*BBB[36]はあってますか? またsub()、subsub()関数の引数*BBB[36]は他にもっとシンプルなやり方があると思うのですが。 どなたか教えて下さい。 宜しくお願いします。

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

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.2

プロトタイプ宣言がありません。>error void型の関数subやsubsubからの戻り値を変数rtnに代入しようとしています>error 関数定義に型指定がありません。>error それ以外は大丈夫でしょう。 あと、関数定義で配列のサイズを渡しているが、Cでは渡された配列のバウンダリチェックをしたりはしないので、struct AAA *BBB[]として、サイズ指定なしで渡すのが普通だと思う。 あと、もっとシンプルな書き方として、struct AAA **BBBというのもあるが、今回BBBはポインタの配列ということを明示するべきかもしれないので、私はstruct AAA *BBB[]という書き方を推しておく。 ちなみに今回テストしたプログラムは以下。 #include <stdlib.h> struct AAA{ char *aaa; char *bbb; }; //void sub(struct AAA *BBB[36]); //←コレ int main(){ struct AAA *BBB[36]; int rtn; rtn = sub(BBB); //←コレ return 0; } void sub(/*struct AAA*/ *BBB[36]){ //←コレ int i; for(i=0; i<3; i++){ BBB[i] = (struct AAA*)malloc(sizeof(struct AAA)); } } // この程度、一度コンパイルしたらわかるんじゃないの

toritu
質問者

お礼

ご指摘ありがとうございました。 実際には本プログラムがあるのですが、簡単に説明しようと思い宣言などは抜かしてこちらには書きました、すみません、ご面倒をおかけしてしまいました。 参考になりました。ありがとうございます!!!

その他の回答 (1)

回答No.1

sub の プロトタイプは、 void sub(struct AAA *BBB[]); になると思いますが。

toritu
質問者

お礼

ありがとうございます!!!