- ベストアンサー
構造体の宣言方法について
構造体の宣言で ヘッダーファイルに struct RAM rom_AAA[20] を宣言 Cソースファイル(上記のヘッダーファイルをインクルードする)に struct RAM { struct BBB *CCC } を宣言 とした時 rom_AAA[20]と*CCC(BBBアドレス)はリンクしてる状態になるのでしょうか? 構造体の一部の定数テーブルを参照するために 間単にポインタ使ってグルグル回したいのですが、同じものをアクセスしてる事にならないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
よく見掛ける ヘッダ→本体という記述順なら ・struct RAM rom_AAA[20]; の段階ではsturct RAMは未定義なのでエラー。 または ・rom_AAAの段階でstruct RAM 定義されているのなら、 struct RAM { struct BBB *CCC } ;が多重定義でエラー。 #includeの位置が struct RAM { struct BBB *CCC } ;の後なら ・i=0~19の整数について、 struct BBBへのポインタ rom_AAA[i].CCC が用意される。 宣言時点では rom_AAA[i].CCC の値は不定。特定のなにかを指していると考えてはいけない。 同じタグの構造体が互いにリンクされてしまったら、 struct STRUCT a,b,c ; とか宣言したa,b,cが互いにリンクする、ってことになるでしょ。それは変です。 union使うとか、別の構造体(のポインタ)にキャストするとか方法はあるけど、素直に書くのが一番ではないでしょうか
その他の回答 (1)
- D-Matsu
- ベストアンサー率45% (1080/2394)
どーでもよくないので突っ込んでおきますが、多重シンボル定義の温床になるので普通は変数の実体宣言をヘッダに書くことはしません。 #構造体等の型定義はヘッダにもソースにも書きますが。 それはさておき、 > struct RAM rom_AAA[20] この宣言では、rom_AAAの各要素のCCCは実体を指していません。 従ってこのまま何もせずにrom_AAA[0].CCCを実体があるかのように扱おうとすると、その瞬間にコケます。 あとの質問は抽象的すぎるので、も少し具体的に。