
例えば、入れ子の構造体を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つでも出来るのであれば、コードの書き方を教えて頂けませんか?
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;
↑
こんな感じです。
・以上。適切なポインタにセットして使っていけば見やすくなるかも。
2度の回答ありがとうございます。
配列でもアクセス出来るんですね!質問しておいて驚きです。
しかも、ポインタを使うやり方があるとは思いませんでした。
適切なポインタにセットというのは、使えそうですね!
参考にしてやってみようと思います。ありがとうございました。
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;
以上。
この回答への補足
お早い回答、いつもありがとうございます。
やっぱりそのように書くんですか。確かに見づらいですね(汗)
図々しいようで申し訳ないのですが、質問漏れがありまして。
質問内容では、dt、a、b、cと書きましたが、これらが配列(dt[10],a[5],b[20],c[100]とか)だったならば、これらは全て独立しているものなのでしょうか?
アクセスする場合に、例えば、
dt[5].a[0].b[10].c[50] = 10;
などというのは可能なのでしょうか?2回も質問申し訳ありませんが、教えていただけると幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Run-Time Check Failure #3とい...
-
ポインタのポインタとrealloc
-
C言語のポインタに直接アドレス...
-
ExcelVBAでのkernel32(64bit)
-
参照型で受け取った引数をポイ...
-
コンストラクタでnewを失敗した...
-
どうしてエラーになるかわかり...
-
LPSTR型の初期化について
-
C++で変数の型を途中で切り替え...
-
戻り値で構造体を返すことは可...
-
C言語の文字列?処理 strcpyやl...
-
自作関数の引数
-
Excelですべての組合せ(重複組...
-
C言語において、 配列要素をひ...
-
C言語 配列の長さの上限
-
CStringからchar*への型変換に...
-
isalpha()関数について
-
配列を使わずに、変数名を動的...
-
C言語の配列のサイズ
-
Integer変数をカラにしたいので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
セグメントエラー
-
#define NULL ((void *)0) の弊害
-
fopne で失敗する原因
-
LPSTR型の初期化について
-
トリプルポインタが必須!とな...
-
戻り値で構造体を返すことは可...
-
c言語で任意のファイルから読み...
-
参照型で受け取った引数をポイ...
-
ポインタについて
-
アプリを32bitから64bit移行
-
ハンドル、アドレス、ポインタ...
-
ポインタが文字化けしてる?!...
-
NULLポインタが0でない処理系と...
-
ハンドルはポインタか
-
リトルエンディアンというもの...
-
【C言語】戻り値が構造体の関数
おすすめ情報