C語言 關於結構體和位段(二)自引用,定義和初始化

2021-10-10 15:37:24 字數 969 閱讀 7850

關於結構體的自引用

在結構體裡包含個自身型別的成員,是不可行的,例如:

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 這種宣告是錯誤的,因為這種宣告...