例えば、入れ子の構造体を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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
Run-Time Check Failure #3とい...
-
init関数の意味
-
fopne で失敗する原因
-
セグメントエラー
-
どうしてエラーになるかわかり...
-
CWnd::EnableWindow()の扱い方
-
戻り値で構造体を返すことは可...
-
PASCALとFARの意味
-
メモリのアドレスからの値の取...
-
参照型で受け取った引数をポイ...
-
C言語でのconstを返す関数
-
DirectXのDIRECT3DTEXTURE9
-
ExcelVBAでのkernel32(64bit)
-
ハンドル、アドレス、ポインタ...
-
関数ポインタを返す関数の型をt...
-
構造体とfscanf
-
AESのC言語による実装
-
gccでMAKEINTRESOURCEするとdif...
-
登録した文字列をランダムに表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
Cで作成したDLL関数をVBから呼...
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
構造体とfscanf
-
c言語で任意のファイルから読み...
-
デバイスハンドルとは?
-
main(int argc,char **argv[])...
-
基本アルゴリズムの『返す』の...
-
コンストラクタでnewを失敗した...
-
C言語の関数と配列に関する質問
-
参照型で受け取った引数をポイ...
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
おすすめ情報