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 個解答
- ?Lv 56 年前最愛解答
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 已經完成宣告",只要結構內所有變數的大小已知,就能給結構配置記憶體完成宣告,是這樣吧?
基本上是這樣沒錯,更正確的說法是結構內所有變數的「長相」需已知。