• ベストアンサー

構造体の纏め方

関数のポインタを使用して、 /* プロトタイプ宣言 */ void func1 ( void ); void func2 ( void ); void func3 ( void ); /*******************/ /* プロトタイプ纏める */ void ( *funcs[] ) ( void ) = { func1, func2, func3 }; /*********************/ と言うのが、構造体でも出来ないでしょうか?と言うのが質問です。 変数(添字)によって、見るべき構造体を自由に変更させたいと言うのが主な使用方法です。 typedef struct _tag { int arg1; int arg2; } tag; tag watch1 , watch2 , watch3; とある変数が1なら、watch1、とある変数が2なら、watch2、とある変数が3なら、watch3を見ると言うようなプログラムにしたくて、質問しました。 witch文を使うしかないのでしょうか? 良き回答、お待ちしています。

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

  • ベストアンサー
  • hpsk
  • ベストアンサー率40% (48/119)
回答No.3

とりあえず、質問の直接的な答としては tag *watches[3] = { &watch1, &watch2, &watch3 }; でいいと思います。 通常はNo.2の方の方法を使うべきですが、  添え字 <-> 変数 の対応を動的に変えたいような状況ならこの書き方も有用かもしれません。

jam_with_ju2
質問者

お礼

回答、ありがとうございます。 実際に書き直した結果、上手くコンパイルもビルドも上手くいき、実行結果にも満足しています。 どうも有難う御座いました♪

その他の回答 (2)

  • yasuch
  • ベストアンサー率41% (27/65)
回答No.2

私ならNo.1さんと同様に配列を使います。 tag watch[3]; としておいて watch[hensu - 1] というように アクセスするのが可読性も優れているように思いますが これでは、何か不都合なことがあるのでしょうか。

jam_with_ju2
質問者

補足

回答、ありがとうございます。 補足関係はNo1さんの所に書いてありますので、一読して下さい; 今回は、watch1,watch2と言った似てる構造体名を宣言してしまった事が誤解を招いてしまいました;;;

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

配列にすればいいのでは?

jam_with_ju2
質問者

補足

回答、ありがとうございます。 えっと、構造体名に直接的に意味が有る物だったので、何とかして構造体名を変えずに一つに纏めて、添字を使う方法を考えていた所での躓きでした; 単方向リストなんかも考えたのですが、利便性や今後を考えると、出来るだけ構造体を配列として使えると便利だと思って質問した次第でした;

関連するQ&A