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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

struct和union的大小问题

發(fā)布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struct和union的大小问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
union類型以其中size最大的為其大小
struct類型以其中所有size大小之和為其大小 #include<iostream>
using?namespace?std;

int?main()
{
????typedef?union?
{long?i;?int?k[5];?char?c;}?DATE;
????
struct?data?{?int?cat;?DATE?cow;?double?dog;}?too;
????DATE?max;

????cout
<<"sizeof(struct?date)+sizeof(max)?=?"<<sizeof(too)+sizeof(max)<<endl;
????cout
<<"sizeof(too)?=?"<<sizeof(too)<<endl;
????cout
<<"sizeof(max)?=?"<<sizeof(max)<<endl;
????cout
<<"struct?data.cow?size?=?"<<sizeof(too.cow)<<endl;
????cout
<<"union?DATE.i?size?=?"<<sizeof(max.i)<<endl;
????cout
<<"union?char.c?size?=?"<<sizeof(max.c)<<endl;

}
sizeof(struct date)+sizeof(max)返回52
#include<iostream>
using?namespace?std;

int?main()
{
????typedef?union?student?
{
???????
char?name[10];
???????
long?sno;?
???????
char?sex;?
???????
float?score?[4];?
}
?STU;?

STU?a[
5];

cout
<<sizeof(a)<<endl;

return?0;

}
? 初始化了一個含有5個UNION的數(shù)組,由于UNION以其中最大的元素float作為大小? 16*5=80

#include<iostream>
using?namespace?std;

int?main()
{
????typedef?
struct?student?
{
???????
char?name[10];
???????
long?sno;?
???????
char?sex;?
???????
float?score?[4];?
}
?STU;?

STU?a[
5];

cout
<<sizeof(a)<<endl;

return?0;

}
? 輸出為180
自然對齊(natural alignment)即默認(rèn)對齊方式,是指按結(jié)構(gòu)體的成員中(類型)size最大的成員作為基本的分配單元,而且與其順序有這密切的聯(lián)系。size最大的是long,size是 4,所以,按照順序,Char name[10];12個字節(jié);Long sno; 4個字節(jié);Char sex; 4個字節(jié)(這里對齊了);Float score [4]; 16個字節(jié)。于是(12+4+4+16)×5=180

#include<iostream>
using?namespace?std;

int?main()
{
????typedef?
struct?student?
{
???????
char?name[10];
???????
char?sex;?
???????
long?sno;?
???????
float?score?[4];?
}
?STU;?

STU?a[
5];

cout
<<sizeof(a)<<endl;

return?0;

}
?

答案是:160. 為什么,只是換了順序而已呀?關(guān)鍵就在順序上。

結(jié)構(gòu)體中,size最大的是long,size是 4,所以,按照順序,Char name[10];12個字節(jié);但是這12中多分配的2個字節(jié)可以包含后面的Char sex; (問題就在這Float score [4]; 16個字節(jié)。于是(12+4+16)×5=160

轉(zhuǎn)載于:https://www.cnblogs.com/cobain/archive/2008/01/31/1060271.html

總結(jié)

以上是生活随笔為你收集整理的struct和union的大小问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。