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

首頁 > 編程 > C++ > 正文

c/c++中struct定義、聲明、對齊方式解析

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

一、定義/聲明方式

第一種:僅有結構體名,不定義/聲明變量

struct MyStruct{int i;char a[10];double b;};

第二種:有結構體名,并聲明變量名

struct MyStruct{int i;char a[10];double b;}structName;

struct MyStruct{int i;char a[10];double b;};

struct MyStruct structName;

//可同時定義,如struct MyStruct structName={7,“xxxxxxxxxx”,2.1};

//也可結構體之間直接賦值,如struct MyStruct structName = structName1;

//以上為c風格,c++中struct MyStruct structName可省略struct ,也可不省。

第三種:無結構體名,直接聲明變量(對于該結構體,只需要聲明一個變量)

struct{int i;char a[10];double b;}structName;

第四種:帶typedef

typedef struct MyStruct{int i;char a[10];double b;}structName;

則structName=struct MyStruct,structName是結構體類型的別名,不是變量。

可以有structName aa=struct MyStruct aa;

也可以這樣:

typedef struct{int i;char a[10];double b;}structName;

可以直接structName aa,效果跟上面一樣。

typedef主要是為了省事,對于c語言定義結構體變量時總要帶上struct關鍵字,typedef之后就不用了,而c++本身就
不需要struct關鍵字,所以貌似也不需要typedef。

二、對齊方式

如:

struct MyStruct{double dda1;char dda;int type;};int i = sizeof(MyStruct);

經vs2008測試i=16,“sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13”是不對的。這是VC對變量存儲的一個特殊處理,為了提高CPU的存儲速度,VC對一些變量的起始地址做了“對齊”處理。在默認情況下,VC規定各成員變量存放的起始地址相對于結構的起始地址的偏移量必須為該變量的類型所占用的字節數的倍數。

對于上例,16=8+1+3+4,剛好為結構的字節邊界數(即結構中占用最大空間的類型所占用的字節數sizeof(double)=8)的倍數,所以沒有空缺的字節需要填充。

所以整個結構的大小為:sizeof(MyStruct)=8+1+3+4=16,其中有3個字節是VC自動填充的,沒有放任何有意義的東西。

又如:

structMyStruct{char dda;double dda1;int type;};

sizeof(MyStruct)為24=1+7+8+4+4;11個字節是vc自動填充的,最后加的4是為了讓結構的字節邊界數為結構中占用最大空間的類型所占用的字節數的倍數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 皋兰县| 安泽县| 辛集市| 措美县| 田林县| 根河市| 宁化县| 赣榆县| 斗六市| 科尔| 大新县| 英超| 大安市| 余干县| 夏津县| 廉江市| 龙口市| 武夷山市| 怀集县| 仲巴县| 莎车县| 佛冈县| 汽车| 三门峡市| 明溪县| 贵港市| 凤翔县| 静安区| 施秉县| 宁波市| 夹江县| 库车县| 高唐县| 滨州市| 贺州市| 望江县| 凌海市| 渭南市| 岢岚县| 洪湖市| 华阴市|