結構體嵌套的正確表示


什么是結構體的嵌套?

在結構體的定義中,結構體的成員又是另外一個結構體的變量。

結構體嵌套的問題有哪些?

結構體的自引用,就是在結構體內部,包含指向自身類型結構體的指針。

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

結構體應該注意的問題?

結構體定義中可以嵌套其他結構體類型的變量,不可以嵌套自己這個類型的變量。

可以嵌套自己類型的指針。

*********************************自引用結構體******************************

****************************************************************************

不用TYPEDEF——正確的方式:    

 1 #include<iostream>
 2 using namespace std;
 3 struct tag_1
 4 {
 5 struct tsg_1 *A;
 6 //由於指針的長度時確定的(在32位機器上指針長度是4),所以編譯器能夠確定該
 7 結構體的長度
 8 //這個指針看似指向自身,其實不是,而是執行同一類型的不同結構。
 9 int value;
10 };

 

用TYPEDEF——正確的方式(“不完全聲明”):

 1 #include<iostream>
 2 using namespace std;
 3 //正確的方式 使用不 完全聲明
 4 typedef struct tag_a A;
 5 typedef struct tag_b B;
 6 struct tag_a
 7 {
 8 // struct tag_b *bp;
 9 B *bp;
10 int value;
11 };
12 struct tag_b
13 {
14 // struct tag_a *ap;
15 A *ap;
16 int value;
17 };

********************************結構體嵌套的三種正確形式************************

***********************************************************************************

1 typedef struct tag_1
2 {
3 int value;
4 struct tag_1 *link;
5 }NODE;
1 typedef struct tag_1 NODE;
2 struct tag_1
3 {
4 int value;
5 NODE *link;
6 };
1 struct tag_1
2 {
3 int value;
4 struct tag_1 *link;
5 };
6 typedef struct tag_1 NODE;

結構體自身嵌套時候要注意:

    結構體內部定義了一個指向結構體的指針,指針的大小在具體的機器平台和編譯器環境中都是已知的(不同的平台環境的定義不完全相同)。但是要提醒的是:這個指針看似指向自身,其實不是,而是指向同一類型的不同結構。

鏈表和樹的數據結構就都使用到此技巧。自身的結構體指針指向下一節點或者下一子樹的地址。

1 /* 正確的表示*/
2 typedef struct s_ref_t //這里是結構體類型定義 和 結構體標簽
3 {
4 int value;
5 struct s_ref_t *link;//注意這句話與上面相同位置的區別,使用了標簽
6 
7 }s_ref_2;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM