關於結構體的自引用
在結構體裡包含個自身型別的成員,是不可行的,例如:
struct s
;
乙個結構體裡套乙個結構體,裡面還套乙個結構體…
無窮無盡個系統最終會崩潰
因為你套的這個 next 變數(struct s型別)的大小無法計算
正確自引用方法應該是:
#include
struct s
;int
main()
裡面放乙個指標(struct s型別)就好,因為乙個指標裡存放的是乙個位址,位址的大小確定(32位機器上是4個位元組,64位機器上是8個位元組),這樣乙個結構體裡面放下乙個結構體的位址,指向的下乙個結構體裡又有指向下下個結構體的指標,最終會連起來。
結構體的定義變數和初始化有兩種方式
第一種是在宣告變數型別(struct s)的時候就定義變數:
struct s
s1;
如圖所示
當然,如果你還想初始化,就在後面加上變數對應內容,形式類似於
int a = 3;
struct s
s1 =
;
第二種定義變數和初始化的方式為在函式體內定義和初始化
例如:
int
main()
;return0;
}
這兩種都可以
但,如果乙個結構體裡面套另乙個結構體(不是自身型別)怎麼辦
struct s
;struct d
;
看,這樣初始化就好:
struct s
;struct d
s =};
結構體型別變數就用{}進行包裝,其他定義和上面講的一樣 C語言 結構體與位段(四) 關於位段
關於位段的基本形式 struct s 那麼,大家可以感覺到他和結構體唯一的不同點 好像就是冒號和後面的數字 那麼這是什麼意思呢?我們來求一下這個結構體的大小 詳情見第三章 記憶體對齊現象 struct s 是不是4 4 16 個位元組啊?是對的結構體這麼表示是16個位元組 但是當表示位段,不同點是,...
C語言中結構體 自引用 和 相互引用
technorati 標籤 c語言,結構體,自引用,相互引用,self reference,mutual reference 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含...
C語言中結構體 自引用 和 相互引用
結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1 不使用typedef時 錯誤的方式 1 struct tag 1 這種宣告是錯誤的,因為這種宣告...