C語言中結構體 自引用 和 相互引用

2022-03-26 05:04:29 字數 1863 閱讀 7085

結構體的自引用(self reference),就是在結構體內部,包含指向自身型別結構體的指標。

結構體的相互引用(mutual reference),就是說在多個結構體中,都包含指向其他結構體的指標。

1.1 不使用typedef時

錯誤的方式:

1

struct

tag_1;

這種宣告是錯誤的,因為這種宣告實際上是乙個無限迴圈,成員b是乙個結構體,b的內部還會有成員是結構體,依次下去,無線迴圈。在分配記憶體的時候,由於無限巢狀,也無法確定這個結構體的長度,所以這種方式是非法的。

正確的方式:(使用指標):

1

struct

tag_1;

由於指標的長度是確定的(在32位機器上指標長度為4),所以編譯器能夠確定該結構體的長度。

1.2 使用typedef 時

錯誤的方式:

1 typedef struct

node;

這裡的目的是使用typedef為結構體建立乙個別名nodep。但是這裡是錯誤的,因為型別名的作用域是從語句的結尾開始,而在結構體內部是不能使用的,因為還沒定義。

正確的方式:

有三種,差別不大,使用哪種都可以。

1

/*方法一

*/2 typedef struct

tag_1 node;67

8/*方法二 */9

struct

tag_2;

10 typedef struct

tag_2 node;

11struct

tag_2;

1516

17/*

方法三

*/18

struct

tag_3;

22 typedef struct tag_3 node;

錯誤的方式:

1 typedef struct

tag_a a;

56 typedef struct

tag_b b;

錯誤的原因和上面一樣,這裡型別b在定義之 前 就被使用。

正確的方式:(使用「不完全宣告」)

1

/*方法一 */2

struct

tag_a;

6struct

tag_b;

10 typedef struct

tag_a a;

11 typedef struct

tag_b b;

1213

14/*

方法二

*/15

struct tag_a; /*

使用結構體的不完整宣告(incomplete declaration)

*/16

struct

tag_b;

17 typedef struct

tag_a a;

18 typedef struct

tag_b b;

19struct

tag_a;

23struct

tag_b;

C語言中結構體 自引用 和 相互引用

technorati 標籤 c語言,結構體,自引用,相互引用,self reference,mutual reference 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含...

C語言中結構體 自引用 和 相互引用

結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1 不使用typedef時 錯誤的方式 1 struct tag 1 這種宣告是錯誤的,因為這種宣告...

C語言複習 自引用結構體

測試 include include int main struct student p,q,r,current p struct student malloc sizeof struct student q struct student malloc sizeof struct student r...