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

首頁(yè) > 編程 > C++ > 正文

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

2020-05-23 13:33:48
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、定義/聲明方式

第一種:僅有結(jié)構(gòu)體名,不定義/聲明變量

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

第二種:有結(jié)構(gòu)體名,并聲明變量名

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

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

struct MyStruct structName;

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

//也可結(jié)構(gòu)體之間直接賦值,如struct MyStruct structName = structName1;

//以上為c風(fēng)格,c++中struct MyStruct structName可省略struct ,也可不省。

第三種:無(wú)結(jié)構(gòu)體名,直接聲明變量(對(duì)于該結(jié)構(gòu)體,只需要聲明一個(gè)變量)

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是結(jié)構(gòu)體類型的別名,不是變量。

可以有structName aa=struct MyStruct aa;

也可以這樣:

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

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

typedef主要是為了省事,對(duì)于c語(yǔ)言定義結(jié)構(gòu)體變量時(shí)總要帶上struct關(guān)鍵字,typedef之后就不用了,而c++本身就
不需要struct關(guān)鍵字,所以貌似也不需要typedef。

二、對(duì)齊方式

如:

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

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

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

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

又如:

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 郓城县| 玉溪市| 柳州市| 平山县| 兴化市| 平阴县| 巨野县| 易门县| 咸丰县| 元氏县| 田林县| 桃源县| 高要市| 九台市| 临海市| 宜兰市| 九龙县| 安义县| 达尔| 镇赉县| 武乡县| 合山市| 灵石县| 江永县| 阳山县| 丽江市| 格尔木市| 武冈市| 苏尼特右旗| 茂名市| 铁力市| 汽车| 昭觉县| 烟台市| 通州区| 大新县| 当阳市| 金坛市| 阿拉善盟| 图们市| 汉寿县|