国产探花免费观看_亚洲丰满少妇自慰呻吟_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是為了讓結構的字節邊界數為結構中占用最大空間的類型所占用的字節數的倍數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛山市| 义乌市| 改则县| 浪卡子县| 平乐县| 尚志市| 苍山县| 师宗县| 怀来县| 岳西县| 南城县| 五河县| 阿城市| 绥化市| 邢台市| 麦盖提县| 高尔夫| 清水河县| 米泉市| 六盘水市| 封开县| 巨鹿县| 英山县| 伊宁市| 宁晋县| 滦南县| 内乡县| 白水县| 乌拉特中旗| 静安区| 和顺县| 龙川县| 德保县| 武陟县| 泽普县| 天峨县| 唐山市| 甘肃省| 周宁县| 西贡区| 鞍山市|