亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

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

2020-01-26 14:38:45
字體:
來源:轉載
供稿:網友

結構體的自引用(self reference),就是在結構體內部,包含指向自身類型結構體的指針。
結構體的相互引用(mutual reference),就是說在多個結構體中,都包含指向其他結構體的指針。
1. 自引用 結構體
1.1 不使用typedef時
錯誤的方式:

struct tag_1{   struct tag_1 A;  /* 結構體 */   int value; }; 

        這種聲明是錯誤的,因為這種聲明實際上是一個無限循環,成員b是一個結構體,b的內部還會有成員是結構體,依次下去,無線循環。在分配內存的時候,由于無限嵌套,也無法確定這個結構體的長度,所以這種方式是非法的。
正確的方式: (使用指針):

struct tag_1{   struct tag_1 *A; /* 指針 */   int value; }; 

        由于指針的長度是確定的(在32位機器上指針長度為4),所以編譯器能夠確定該結構體的長度。
1.2 使用typedef 時
錯誤的方式:

typedef struct {   int value;   NODE *link; /* 雖然也使用指針,但這里的問題是:NODE尚未被定義 */ } NODE; 

這里的目的是使用typedef為結構體創建一個別名NODEP。但是這里是錯誤的,因為類型名的作用域是從語句的結尾開始,而在結構體內部是不能使用的,因為還沒定義。
正確的方式:有三種,差別不大,使用哪種都可以。

/* 方法一 */ typedef struct tag_1{   int value;   struct tag_1 *link;  } NODE;   /* 方法二 */ struct tag_2; typedef struct tag_2 NODE; struct tag_2{   int value;   NODE *link;   };   /* 方法三 */ struct tag_3{   int value;   struct tag *link;  }; typedef struct tag_3 NODE; 

2. 相互引用 結構體
錯誤的方式:

typedef struct tag_a{   int value;   B *bp; /* 類型B還沒有被定義 */ } A;  typedef struct tag_b{   int value;   A *ap; } B; 

 
        錯誤的原因和上面一樣,這里類型B在定義之 前 就被使用。
正確的方式:(使用“不完全聲明”)

/* 方法一  */  struct tag_a{   struct tag_b *bp; /* 這里struct tag_b 還沒有定義,但編譯器可以接受 */   int value; }; struct tag_b{   struct tag_a *ap;   int value; }; typedef struct tag_a A; typedef struct tag_b B;    /* 方法二  */  struct tag_a;  /* 使用結構體的不完整聲明(incomplete declaration) */ struct tag_b; typedef struct tag_a A;  typedef struct tag_b B; struct tag_a{   struct tag_b *bp; /* 這里struct tag_b 還沒有定義,但編譯器可以接受 */   int value; }; struct tag_b{   struct tag_a *ap;   int value; }; 

3.實例:
應用結構體指針變量,打印結構體成員變量的信息。

#include <stdio.h>struct Point{double x; /*x坐標*/double y; /*y坐標*/double z; /*z坐標*/};int main(){struct Point oPoint1={100,100,0};struct Point oPoint2;struct Point *pPoint; /*定義結構體指針變量*/pPoint=& oPoint2;   /*結構體指針變量賦值*/(*pPoint).x= oPoint1.x;(*pPoint).y= oPoint1.y;(*pPoint).z= oPoint1.z;printf("oPoint2={%7.2f,%7.2f,%7.2f}",oPoint2.x, oPoint2.y, oPoint2.z);return(0);}

程序運行結果如下:

oPoint2={ 100.00,100.00,0.00}

其中表達式&oPoint2的作用是獲得結構體變量oPoint2的地址。表達式pPoint=&oPoint2的作用是將oPoint2的地址存儲在結構體指針變量pPoint中,因此pPoint存儲了oPoint2的地址。*pPoint代表指針變量pPoint中的內容,因此*pPoint 和oPoint2等價。
通過結構體指針變量獲得其結構體變量的成員變量的一般形式如下:
(*結構體指針變量). 成員變量
其中“結構體指針變量”為結構體指針變量,“成員變量”為結構體成員變量名稱,“.”為取結構體成員變量的運算符。
另外C語言中引入了新的運算符“->”,通過結構體指針變量直接獲得結構體變量的成員變量,一般形式如下:
結構體指針變量-> 成員變量
其中“結構體指針變量”為結構體指針變量,“成員變量”為結構體成員變量名稱,“- >”為運算符。
因此,例中的部分代碼

……(*pPoint).x= oPoint1.x;(*pPoint).y= oPoint1.y;(*pPoint).z= oPoint1.z;……

等價于

……pPoint->x= oPoint1.x;pPoint->y= oPoint1.y;pPoint->z= oPoint1.z;……

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产香蕉一区二区三区在线视频| 中文字幕欧美专区| 综合久久五月天| 91精品一区二区| 日韩精品在线视频观看| 姬川优奈aav一区二区| 日韩电影网在线| 国产一区二区三区中文| 粉嫩老牛aⅴ一区二区三区| 日韩第一页在线| 亚洲一区亚洲二区亚洲三区| 欧美情侣性视频| 亚洲第一区第二区| 欧美在线性爱视频| 亚洲第一天堂av| 91亚洲精品在线| 午夜精品久久久99热福利| 久久精品国产v日韩v亚洲| 久久精品国产亚洲| 久久久精品视频成人| 中文字幕不卡在线视频极品| 国产精品成人观看视频国产奇米| 亚洲精品成a人在线观看| 91tv亚洲精品香蕉国产一区7ujn| 国产精品美女视频网站| 国产98色在线| 亚洲japanese制服美女| 欧美在线视频在线播放完整版免费观看| 久热国产精品视频| 亚洲一区二区三区四区视频| 色阁综合伊人av| 欧美日韩国产中字| 欧美成人久久久| 91av网站在线播放| 亚洲第一av网站| 成人免费观看49www在线观看| 欧美精品一区在线播放| 国产免费一区二区三区在线观看| 久久九九有精品国产23| 国产在线观看一区二区三区| 一色桃子一区二区| 久久午夜a级毛片| 亚洲欧美精品中文字幕在线| 最近中文字幕mv在线一区二区三区四区| 美女扒开尿口让男人操亚洲视频网站| 亚洲аv电影天堂网| 亚洲成人网久久久| 欧美激情高清视频| 一区三区二区视频| 91免费国产视频| 欧美成人精品不卡视频在线观看| 成人妇女淫片aaaa视频| 久久久久久久香蕉网| 国产欧美韩国高清| 69国产精品成人在线播放| 欧美性猛交丰臀xxxxx网站| 国产精品网站大全| 国产91在线播放九色快色| 日韩欧美在线观看视频| 亚洲视频视频在线| 国产亚洲欧洲黄色| 欧洲午夜精品久久久| 国产一区香蕉久久| 欧美日韩中文字幕在线视频| 亚洲人成网站在线播| 亚洲综合大片69999| 亚洲激情在线视频| 欧美刺激性大交免费视频| 成人免费视频a| 亚洲精选一区二区| 欧美猛交免费看| 久久久久久18| 九九热精品视频| 亚洲人成在线电影| 国产一区私人高清影院| 日韩毛片在线看| 2020久久国产精品| 亚洲第一福利网站| 91精品久久久久久久久久| 97在线视频免费| 久久精品国产精品亚洲| 日韩欧美国产一区二区| 欧美另类暴力丝袜| 国产日韩专区在线| 国产综合视频在线观看| 爱福利视频一区| 日韩av色综合| 欧美精品电影在线| 亚洲综合大片69999| 欧美成人高清视频| 国产精品一二区| 国产欧美精品一区二区| 欧美亚洲另类激情另类| 久久久久久久影视| 美日韩丰满少妇在线观看| 亚洲激情视频在线播放| 国产精品网站大全| 91视频-88av| 国内免费久久久久久久久久久| 亚洲激情小视频| 亚洲综合日韩中文字幕v在线| 尤物yw午夜国产精品视频明星| 日韩av在线精品| 中文字幕视频一区二区在线有码| 久久婷婷国产麻豆91天堂| 亚洲一区二区三区视频| 精品激情国产视频| 91精品视频网站| 欧美成人免费观看| 国产在线拍偷自揄拍精品| 伊人成人开心激情综合网| 久久精品成人一区二区三区| 精品国产福利在线| 亚洲综合视频1区| 亚洲美女自拍视频| 欧美天堂在线观看| 国产精品福利观看| 亚洲日本成人女熟在线观看| 日韩免费在线视频| 福利一区福利二区微拍刺激| 日韩欧美在线视频免费观看| 日韩欧美aⅴ综合网站发布| 欧美久久久精品| 欧美午夜精品久久久久久久| 日韩成人激情视频| 亚洲精品中文字幕有码专区| 欧美激情中文字幕在线| 日韩高清不卡av| 亚洲国产精品999| 久久人人97超碰精品888| 亚洲午夜av久久乱码| 日韩在线小视频| 日韩中文字幕精品视频| 欧美性开放视频| 色狠狠av一区二区三区香蕉蜜桃| 欧美一级视频在线观看| 国产日产亚洲精品| 亚洲自拍偷拍福利| 亚洲欧洲黄色网| 亚洲a级在线播放观看| 日本精品久久久久影院| 国产成+人+综合+亚洲欧美丁香花| 亚洲片国产一区一级在线观看| 国产成人精品久久二区二区91| 久久久精品视频在线观看| 国产成人97精品免费看片| 黄网动漫久久久| 5278欧美一区二区三区| 久99九色视频在线观看| 久久亚洲精品视频| 日韩精品在线影院| 成人精品视频久久久久| 久久大大胆人体| 国产视频久久久久| 在线成人激情黄色| 国产成人精品在线视频| 精品国模在线视频| 亚洲一区二区三区777| 中文字幕久精品免费视频| 国产美女久久精品| 国产精品69av| 91av视频在线播放| 国产aⅴ夜夜欢一区二区三区| 97精品一区二区视频在线观看|