久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

結(jié)構(gòu)體的嵌套 自身嵌套 相互嵌套

 _了凡_ 2021-09-25

什么是結(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——錯誤的方式:    

  1. #include<iostream>
  2. using namespace std;
  3. struct tag_1{
  4. struct tag_1 A; //A是一個結(jié)構(gòu)體,A的內(nèi)部還會有一個結(jié)構(gòu)體,以此下>去,,無線循環(huán),。在內(nèi)存分配的時候,由于無限的嵌套,,無法確定結(jié)構(gòu)體的長度,,所>以時非法的。
  5. int value;
  6. };
  7. int main()
  8. {
  9. return 0;
  10. }

不用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——錯誤的方式:

  1. #include<iostream>
  2. using namespace std;
  3. typedef struct{
  4. int value;
  5. NODE *link;
  6. }NODE;
  7. //使用typedef為結(jié)構(gòu)體創(chuàng)建一個別名NODE,。
  8. //但是是錯誤的,,因為類型名的作用域是從語句結(jié)尾開始的,而在結(jié)構(gòu)體內(nèi)部是不>能使用的,,因為還沒有定義,。

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

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

********************************結(jié)構(gòu)體嵌套的三種正確形式************************

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

typedef struct tag_1{int value;struct tag_1 *link;}NODE;
  1. typedef struct tag_1 NODE;
  2. struct tag_1
  3. {
  4. int value;
  5. NODE *link;
  6. };
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é)點或者下一子樹的地址,。

  1. /* 錯誤的表示*/
  2. typedef struct //這里是結(jié)構(gòu)體類型的定義
  3. {
  4. int value;
  5. s_ref_1 *link;//注意這局引用了結(jié)構(gòu)體類型名
  6. }s_ref_1;//ISO C 不允許聲明無類型的's_ref_1’
  7. /* 正確的表示*/
  8. typedef struct s_ref_t //這里是結(jié)構(gòu)體類型定義 和 結(jié)構(gòu)體標簽
  9. {
  10. int value;
  11. struct s_ref_t *link;//注意這句話與上面相同位置的區(qū)別,,使用了標簽
  12. }s_ref_2;

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多