• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:入れ子の構造体について)

C言語の入れ子の構造体の書き方

このQ&Aのポイント
  • C言語において、入れ子の構造体を使用する方法について説明します。
  • 入れ子の構造体を1つ使用する場合は、struct bbbをtypedefしたstruct aaaを作成し、変数dtを宣言します。
  • 入れ子の構造体を2つ使用する場合も、struct bbbをstruct cccを含むように定義し、同じくtypedefしたstruct aaaを作成します。変数dtを宣言し、dt.a.b.cで値を設定できます。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.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;  ↑  こんな感じです。 ・以上。適切なポインタにセットして使っていけば見やすくなるかも。

sikimori
質問者

お礼

2度の回答ありがとうございます。 配列でもアクセス出来るんですね!質問しておいて驚きです。 しかも、ポインタを使うやり方があるとは思いませんでした。 適切なポインタにセットというのは、使えそうですね! 参考にしてやってみようと思います。ありがとうございました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

もちろんできます. メモリがあれば.

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★出来ます。 ・入れ子が深くてもアクセスできます。  でも見づらいけど。 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; 以上。

sikimori
質問者

補足

お早い回答、いつもありがとうございます。 やっぱりそのように書くんですか。確かに見づらいですね(汗) 図々しいようで申し訳ないのですが、質問漏れがありまして。 質問内容では、dt、a、b、cと書きましたが、これらが配列(dt[10],a[5],b[20],c[100]とか)だったならば、これらは全て独立しているものなのでしょうか? アクセスする場合に、例えば、 dt[5].a[0].b[10].c[50] = 10; などというのは可能なのでしょうか?2回も質問申し訳ありませんが、教えていただけると幸いです。

関連するQ&A