什么是結(jié)構(gòu)體的嵌套,? 在結(jié)構(gòu)體的定義中,,結(jié)構(gòu)體的成員又是另外一個結(jié)構(gòu)體的變量,。 結(jié)構(gòu)體嵌套的問題有哪些,? 結(jié)構(gòu)體的自引用,,就是在結(jié)構(gòu)體內(nèi)部,包含指向自身類型結(jié)構(gòu)體的指針,。 結(jié)構(gòu)體的相互引用,,就是說在多個結(jié)構(gòu)體中,都包含指向其他結(jié)構(gòu)體的指針,。 結(jié)構(gòu)體應(yīng)該注意的問題,? 結(jié)構(gòu)體定義中可以嵌套其他結(jié)構(gòu)體類型的變量,不可以嵌套自己這個類型的變量,。 可以嵌套自己類型的指針,。 *********************************自引用結(jié)構(gòu)體****************************** **************************************************************************** 不用TYPEDEF——錯誤的方式:
不用TYPEDEF——正確的方式: #include<iostream>using namespace std;struct tag_1{struct tsg_1 *A;//由于指針的長度時確定的(在32位機器上指針長度是4),,所以編譯器能夠確定該結(jié)構(gòu)體的長度//這個指針看似指向自身,其實不是,,而是執(zhí)行同一類型的不同結(jié)構(gòu)。int value;}; 用TYPEDEF——錯誤的方式:
*********************************相互引用結(jié)構(gòu)體****************************** ******************************************************************************* 用TYPEDEF——錯誤的方式: #include<iostream>using namespace std;typedef struct tag_a{B *bp;int value;}A;typedef struct tag_b{A *ap;int value;}B;//錯誤的,在類型B在定義之前就被引用 用TYPEDEF——正確的方式(“不完全聲明”):
********************************結(jié)構(gòu)體嵌套的三種正確形式************************ *********************************************************************************** typedef struct tag_1{int value;struct tag_1 *link;}NODE;
struct tag_1{int value;struct tag_1 *link;};typedef struct tag_1 NODE; 結(jié)構(gòu)體自身嵌套時候要注意: 結(jié)構(gòu)體內(nèi)部定義了一個指向結(jié)構(gòu)體的指針,,指針的大小在具體的機器平臺和編譯器環(huán)境中都是已知的(即使不同的平臺環(huán)境的定義不完全相同),。但是要提醒的是:這個指針看似指向自身,其實不是,,而是指向同一類型的不同結(jié)構(gòu),。 鏈表和樹的數(shù)據(jù)結(jié)構(gòu)就都使用到此技巧。自身的結(jié)構(gòu)體指針指向下一節(jié)點或者下一子樹的地址,。
|
|