国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

結(jié)構(gòu)體的嵌套問題

2019-11-10 17:20:29
字體:
供稿:網(wǎng)友

1. 自引用結(jié)構(gòu)體

1.1 不使用typedef時

錯誤的方式:

struct tag_1{    struct tag_1 A;      int value;};// 這種聲明是錯誤的,因為這種聲明實際上是一個無限循環(huán),成員A是一個結(jié)構(gòu)體,A的內(nèi)部還會有成員是結(jié)構(gòu)體,依次下去,無線循環(huán)。//在分配內(nèi)存的時候,由于無限嵌套,也無法確定這個結(jié)構(gòu)體的長度,所以這種方式是非法的。

正確的方式: (使用指針)

struct tag_1{    struct tag_1 *A;     int value;};// 由于指針的長度是確定的(在32位機器上指針長度為4),所以編譯器能夠確定該結(jié)構(gòu)體的長度。

1.2 使用typedef 時

錯誤的方式:

typedef struct {    int value;    NODE *link; } NODE;//這里的目的是使用typedef為結(jié)構(gòu)體創(chuàng)建一個別名NODE。但是這里是錯誤的,因為類型名的作用域是從語句的結(jié)尾開始,//而在結(jié)構(gòu)體內(nèi)部是不能使用的,因為還沒定義。

正確的方式:有三種,差別不大,使用哪種都可以。

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_3 *link; };typedef struct tag_3 NODE;

2. 相互引用 結(jié)構(gòu)體

錯誤的方式:

typedef struct {    int value;    NODE *link; } NODE;//這里的目的是使用typedef為結(jié)構(gòu)體創(chuàng)建一個別名NODE。但是這里是錯誤的,因為類型名的作用域是從語句的結(jié)尾開始,//而在結(jié)構(gòu)體內(nèi)部是不能使用的,因為還沒定義。

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

struct tag_a{    struct tag_b *bp;     int value;};struct tag_b{    struct tag_a *ap;    int value;};typedef struct tag_a A;typedef struct tag_b B;struct tag_a;  struct tag_b;typedef struct tag_a A;typedef struct tag_b B;struct tag_a{    struct tag_b *bp;     int value;};struct tag_b{    struct tag_a *ap;    int value;};//


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南漳县| 麦盖提县| 湖北省| 迭部县| 开原市| 蒙城县| 阜平县| 乐业县| 大化| 启东市| 鲁山县| 曲靖市| 清苑县| 务川| 灵川县| 青川县| 怀来县| 禄丰县| 常熟市| 襄樊市| 攀枝花市| 乌审旗| 黔江区| 镶黄旗| 鸡泽县| 乌兰浩特市| 清徐县| 兰溪市| 仙桃市| 湘阴县| 贺兰县| 中宁县| 阳新县| 台湾省| 民和| 庐江县| 乐至县| 顺平县| 平乡县| 通州区| 永胜县|