- ベストアンサー
構造体の纏め方
関数のポインタを使用して、 /* プロトタイプ宣言 */ 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文を使うしかないのでしょうか? 良き回答、お待ちしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、質問の直接的な答としては tag *watches[3] = { &watch1, &watch2, &watch3 }; でいいと思います。 通常はNo.2の方の方法を使うべきですが、 添え字 <-> 変数 の対応を動的に変えたいような状況ならこの書き方も有用かもしれません。
その他の回答 (2)
- yasuch
- ベストアンサー率41% (27/65)
私ならNo.1さんと同様に配列を使います。 tag watch[3]; としておいて watch[hensu - 1] というように アクセスするのが可読性も優れているように思いますが これでは、何か不都合なことがあるのでしょうか。
補足
回答、ありがとうございます。 補足関係はNo1さんの所に書いてありますので、一読して下さい; 今回は、watch1,watch2と言った似てる構造体名を宣言してしまった事が誤解を招いてしまいました;;;
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
配列にすればいいのでは?
補足
回答、ありがとうございます。 えっと、構造体名に直接的に意味が有る物だったので、何とかして構造体名を変えずに一つに纏めて、添字を使う方法を考えていた所での躓きでした; 単方向リストなんかも考えたのですが、利便性や今後を考えると、出来るだけ構造体を配列として使えると便利だと思って質問した次第でした;
お礼
回答、ありがとうございます。 実際に書き直した結果、上手くコンパイルもビルドも上手くいき、実行結果にも満足しています。 どうも有難う御座いました♪