Yahoo 知識+ 將於 2021 年 5 月 4 日 (美國東岸時間) 停止服務,而 Yahoo 知識+ 網站現已轉為僅限瀏覽模式。其他 Yahoo 資產或服務,或你的 Yahoo 帳戶將不會有任何變更。你可以在此服務中心網頁進一步了解 Yahoo 知識+ 停止服務的事宜,以及了解如何下載你的資料。

相互參考結構的問題

2個結構相互參考

struct A{

struct B *a;

};

struct B{

struct A *b;

};

1.請問指標大小:

32位元系統為4bytes

64位元系統為8bytes

一定是這樣嗎?

2.struct A{...}之前需要加上struct B;嗎?

3.若struct B *a;改為struct B a;為何編不過?

4.為何struct C編得過

struct A{

struct B *a;

};

struct B{

struct C *b;

};

struct C{

struct A c;

};

5.相互參考結構有哪些應用

更新:

2.沒加struct B;但gcc編過了,莫非是bug?

4."他所用到的 struct A 已經完成宣告"

只要結構內所有變數的大小已知,就能給結構配置記憶體完成宣告,是這樣吧?

更新 2:

2.查到資料了,是forward reference,所以可以在宣告前使用。

http://zh.wikipedia.org/zh-tw/%E5%89%8D%E5%90%91%E...

2 個解答

評分
  • ?
    Lv 5
    6 年前
    最愛解答

    1.請問指標大小:32位元系統為4bytes,64位元系統為8bytes,一定是這樣嗎?

    大概吧!有知道例外的人請出個聲。

    2.struct A{...}之前需要加上struct B;嗎?

    你覺得呢?你不加,編譯器怎麼知道 struct B 是什麼東西?

    3.若struct B *a;改為struct B a;為何編不過?

    因為編譯器不知道 struct B 長什麼樣子;但若宣告成指標的話,編譯器就不需要知道他實際的長相,只要知道他是個整數就可以了,所以才會編譯通過。

    4.為何struct C編得過

    因為在 struct C 之前,他所用到的 struct A 已經完成宣告,編譯器認得他。

    5.相互參考結構有哪些應用

    任何有關「相互」參考、引用等等的事情,當作腦筋運動玩玩,知道他們可以這樣子變化就好;實際應用上請千萬不要使用任何的相互參考,包含標頭檔等等。

    2014-12-24 23:20:04 補充:

    2.沒加struct B;但gcc編過了,莫非是bug?

    可能是因為 struct B 本身就算個宣告的關係。

    4."他所用到的 struct A 已經完成宣告",只要結構內所有變數的大小已知,就能給結構配置記憶體完成宣告,是這樣吧?

    基本上是這樣沒錯,更正確的說法是結構內所有變數的「長相」需已知。

  • 6 年前

    體育 遊戲 -- 全世界網球)、籃球(NBA)、棒球(MLB)、美足、冰球、足球等遊戲

    http://ts777.cc/

還有問題嗎?立即提問即可得到解答。