dポイントプレゼントキャンペーン実施中!

例えば、入れ子の構造体を1つ使いたい場合、
struct bbb{
int b;
};

typedef struct aaa{
struct bbb a;
}AAA;
AAA dt;

と書くと、「dt.a.b = 10」とやれば、値等を設定できると思いますが、
入れ子の構造体を2つ使いたい場合も、同じように書けるのでしょうか?

struct ccc{
int c;
};

struct bbb{
struct ccc b;
};

typedef struct aaa{
struct bbb a;
}AAA;
AAA dt;

dt.a.b.c = 10;
と書けるのでしょうか?こんがらがってしまって、どう書いていいのか・・。
2つでも出来るのであれば、コードの書き方を教えて頂けませんか?

A 回答 (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;
 ↑
 こんな感じです。
・以上。適切なポインタにセットして使っていけば見やすくなるかも。
    • good
    • 0
この回答へのお礼

2度の回答ありがとうございます。

配列でもアクセス出来るんですね!質問しておいて驚きです。
しかも、ポインタを使うやり方があるとは思いませんでした。

適切なポインタにセットというのは、使えそうですね!
参考にしてやってみようと思います。ありがとうございました。

お礼日時:2007/08/17 16:36

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

    • good
    • 0

★出来ます。


・入れ子が深くてもアクセスできます。
 でも見づらいけど。

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回も質問申し訳ありませんが、教えていただけると幸いです。

補足日時:2007/08/17 15:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!