- ベストアンサー
C言語の入れ子の構造体の書き方
- C言語において、入れ子の構造体を使用する方法について説明します。
- 入れ子の構造体を1つ使用する場合は、struct bbbをtypedefしたstruct aaaを作成し、変数dtを宣言します。
- 入れ子の構造体を2つ使用する場合も、struct bbbをstruct cccを含むように定義し、同じくtypedefしたstruct aaaを作成します。変数dtを宣言し、dt.a.b.cで値を設定できます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス >これらが配列(dt[10],a[5],b[20],c[100]とか)だったならば、 >これらは全て独立しているものなのでしょうか? ↑ そうですね。 アクセスはやっぱり >dt[5].a[0].b[10].c[50] = 10; ↑ とかになります。 ・でも一番深い c[50] を操作するときはポインタにセットしてから使います。 つまり int *pc = dt[5].a[0].b[10].c; pc[0] = 0; pc[1] = 1; : pc[99] = 99; ほかにも CCC *pb = dt[5].a[0].b; pb[0].c[0] = 0; pb[0].c[1] = 1; : pb[0].c[99] = 99; または pb[0].c[0] = 0; pb[1].c[0] = 0; : pb[9].c[0] = 0; ↑ こんな感じです。 ・以上。適切なポインタにセットして使っていけば見やすくなるかも。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
もちろんできます. メモリがあれば.
- Oh-Orange
- ベストアンサー率63% (854/1345)
★出来ます。 ・入れ子が深くてもアクセスできます。 でも見づらいけど。 typedef struct ddd { int d; } DDD; typedef struct ccc { DDD c; } CCC; typedef struct bbb { CCC b; } BBB; typedef struct aaa { BBB a; } AAA; // 宣言 AAA dt; // アクセス dt.a.b.c.d = 10; 以上。
補足
お早い回答、いつもありがとうございます。 やっぱりそのように書くんですか。確かに見づらいですね(汗) 図々しいようで申し訳ないのですが、質問漏れがありまして。 質問内容では、dt、a、b、cと書きましたが、これらが配列(dt[10],a[5],b[20],c[100]とか)だったならば、これらは全て独立しているものなのでしょうか? アクセスする場合に、例えば、 dt[5].a[0].b[10].c[50] = 10; などというのは可能なのでしょうか?2回も質問申し訳ありませんが、教えていただけると幸いです。
お礼
2度の回答ありがとうございます。 配列でもアクセス出来るんですね!質問しておいて驚きです。 しかも、ポインタを使うやり方があるとは思いませんでした。 適切なポインタにセットというのは、使えそうですね! 参考にしてやってみようと思います。ありがとうございました。