日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结构体的嵌套 自身嵌套 相互嵌套

發布時間:2025/10/17 编程问答 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结构体的嵌套 自身嵌套 相互嵌套 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是結構體的嵌套?

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

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

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

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

結構體應該注意的問題?

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

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

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

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

不用TYPEDEF——錯誤的方式: ? ?

#include<iostream> using namespace std; struct tag_1{struct tag_1 A; //A是一個結構體,A的內部還會有一個結構體,以此下>去,無線循環。在內存分配的時候,由于無限的嵌套,無法確定結構體的長度,所>以時非法的。int value; }; int main() {return 0; }

不用TYPEDEF——正確的方式: ? ?

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

用TYPEDEF——錯誤的方式:

#include<iostream> using namespace std; typedef struct{int value;NODE *link; }NODE; //使用typedef為結構體創建一個別名NODE。 //但是是錯誤的,因為類型名的作用域是從語句結尾開始的,而在結構體內部是不>能使用的,因為還沒有定義。

*********************************相互引用結構體******************************

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

用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——正確的方式(“不完全聲明”):

#include<iostream> using namespace std; //正確的方式 使用不 完全聲明 typedef struct tag_a A; typedef struct tag_b B; struct tag_a { // struct tag_b *bp;B *bp;int value; }; struct tag_b { // struct tag_a *ap;A *ap;int value; };

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

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

typedef struct tag_1 {int value;struct tag_1 *link; }NODE; typedef struct tag_1 NODE; struct tag_1 {int value;NODE *link; }; struct tag_1 {int value;struct tag_1 *link; }; typedef struct tag_1 NODE;

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

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

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

/* 錯誤的表示*/ typedef struct //這里是結構體類型的定義 {int value;s_ref_1 *link;//注意這局引用了結構體類型名 }s_ref_1;//ISO C++ 不允許聲明無類型的‘s_ref_1’/* 正確的表示*/ typedef struct s_ref_t //這里是結構體類型定義 和 結構體標簽 {int value;struct s_ref_t *link;//注意這句話與上面相同位置的區別,使用了標簽 }s_ref_2;

總結

以上是生活随笔為你收集整理的结构体的嵌套 自身嵌套 相互嵌套的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。