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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

struct结构体的多种声明方式

發布時間:2023/12/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struct结构体的多种声明方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

結構體聲明

方法1

在聲明結構體時,必須列出它包含的所有成員
語法結構 struct tag { member-list} variable-list;

struct {int a ;float b;double c;short d;}x;

這個聲明創建名為X的變量,它包含四個成員。


struct {int a ;float b;double c;short d;}y[20],*z;

這個聲明創建名為y和Z的指針變量,y是一個數組,它包含20個結構。Z是一個指針,指向這類型的結構。

這兩個聲明是截然不同的類型,即使他們的成員列表完全相同,因此 z = &x是非法的


方法2

/*標簽 類似于面包形狀模板,它給定了制作出來的面包的形狀,但是它沒有制作出面包*/ struct SIMPLE {int a ;float b;double c;short d;}; /*利用上述的標簽(面包模板),制作出一個面包(SIMPLE 類型的結構體)*/ struct SIMPLE x; struct SIMPLE y[20],*z;

標簽標識了一種模式,用于聲明未來的變量,但是無論標簽還是模式
本身都不是變量,這個和方法1的最大區別—x,y,z是同一種類型的結構體變量。


方法3

最常用的使用技巧typedef 創建一種新的類型 typedef struct{int a;char b;float c;} Simple;

這個技巧和聲明一個結構體標簽的效果幾乎相同,區別在于Simple現在是類型名
而不是個結構標簽,

struct Simple x; struct Simple y[20],*z;

結構體的訪問

聲明結構體 struct Simple x,*z; //聲明一個 結構體變量x,和一個指向結構體變量的指針。訪問變量x的結構體成員 x.a; x.b; x.c;訪問指針Z z->a; z->b; z->c;

結構體的自引用

結構體的自引用就是在一個結構體內部包含這個結構體本身。 struct SELP_REF1{int a;struct SELP_REF1 b;int c; } //非法

這個方法是非法的,成員b是另一個完整的結構體,其內部還將包含它自己的成員b.
第二個成員又是另外一個完整的結構體,它還包含自己的成員b。這樣永無止境循環。

struct SELP_REF1{int a;struct SELP_REF1 *b;int c; }//合法

區別在于b現在是一個指針不是一個結構體,編譯器在結構的長度確定之前就知道指針的長度,所以這種類型的自引用是合法的。

如果你覺得一個結構內部包含一個指向該結構體本身的指針有些奇怪,請記住它事實上指向的是同一種類型的不同結構體。更加高級的數據結構,如鏈表和樹,都是使用這種技巧實現的每個結構指向鏈表的下一個元素或樹的下一個分支。

警告

typedef struct {int a;SELP_REF3 *b;int c; }SELP_REF3;

這個聲明的目的是為這個結構體創建類型名 SELP_REF3。但是,它失敗了。
類型名直到聲明的末尾才定義,所以在結構聲明的內部它尚未定義。

解決方案是定義一個結構體標簽來聲明b,

typedef struct SELP_REF3_TAG {int a;struct SELP_REF3_TAG *b;int c; }SELP_REF3;

聯合體的初始化

聯合體可以被初始化,但這個初始化必須是第一個成員的類型,而且它必須位于一個花括號內

union {int a;char b;float c[5]; }x = {5}; 把 x.a 初始化為5

我們不能把這個初始化的類量初始化為 字符型,浮點型,只能是第一個成員的類型。如果被初始化為其他類型,則進行強制轉換(如果可以轉換),再賦值給x.a。

本文參考《C和指針》這個本書寫的。

總結

以上是生活随笔為你收集整理的struct结构体的多种声明方式的全部內容,希望文章能夠幫你解決所遇到的問題。

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