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

2021-05-24 12:05:36 字數 1809 閱讀 4362

technorati 標籤:

c語言,

結構體,

自引用,

相互引用,

self reference,

mutual reference

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

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

1.1 不使用typedef時

錯誤的方式:

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

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

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

1.2 使用typedef 時

錯誤的方式:

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

正確的方式:

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

/*  方法一  */

typedef struct tag_1 node;

/* 方法二 */

struct tag_2;

typedef struct tag_2 node;

struct tag_2;

/* 方法三 */

struct tag_3;

typedef struct tag_3 node;

錯誤的方式:

typedef struct tag_a a;

typedef struct tag_b b;

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

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

/* 方法一   */ 

struct tag_a;

struct tag_b;

typedef struct tag_a a;

typedef struct tag_b b;

/* 方法二 */

struct tag_a; /* 使用結構體的不完整宣告(incomplete declaration) */

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

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

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...