vb6实现union数据结构_c++实现分科考试

    上次,我们实现了成绩排序的功能,但是呢,并不是每个时候我们都是每人每科都考试的,比如我们学校江苏省最近省测,每个人只考一门,如果使用struct的话就显得浪费了,那么我们今天就来多学习一个新的数据结构来解决这个问题。de4c695d3ed775fb0681050918c56490.png

/1.sizeof运算符/

    在上文中,我们提到“如果用struct就显得浪费了”,那么我们该怎样证明struc浪费呢?

    我们都知道,计算机储存数据的地方叫做内存,我们程序中的每一个值都是储存在内存中的,不过占的内存大小不同,所以我们可以通过占的内存大小来判断是否“浪费”。

    c++为此提供了一个运算符,叫做sizeof。

    我们来看看它的用法吧:

struct student{  int math;  int chinese;  int english;};int main(){  int a[10] = {1,2,3,4,5,6,7,8,9,0};    cout << sizeof(int) << endl; // 输出数据类型大小  cout << sizeof(1+2) << endl; // 输出表达式大小  cout << sizeof(a) << endl;   // 输出数组大小  cout << sizeof(student) << endl;// 输出结构体大小   return 0;}

    运行结果如下:

fea68d96bd6436a1502c5002c95bb155.png

    从运行结果可以看出,int类型占4个Byte(字节),数组的大小是数组长度*数组每个元素大小(在本例中10*int=10*4=40),结构体的大小是结构体中每个变量大小之和(在本例中int+int+int=4*3=12)。

/2.共用体/

    在上面例子中我么可以看到,就算我们没有赋值,student结构体的大小依然是12字节,这就造成了资源的浪费。

    而今天我们要介绍的“共用体union”就不会发生这种问题,union更像一种只允许有一个键的字典:

union student{  int math;  int chinese;  int english;};int main(){  student a;  a.math = 100;  cout << sizeof(a) << endl;  cout <endl;  return 0;}

    上面例子的运行结果:

e9d273e862a2c8e1691c73f8f7c9f693.png

    看!同样的代码,union比struct整整小了三倍!

    但是union只允许存在一个变量被赋值,其他变量在这时候会变成一样的值:

  cout << a.chinese << endl;  cout << a.english << endl;

    输出为100 100。

    union更像是一个变量,它的值以最后更改的为准:

int main(){  student a;  a.math = 100;  cout << a.math << endl;  cout << a.chinese << endl;  a.chinese = 99;  cout << a.math << endl;  cout << a.chinese << endl;  return 0;}

    输出:

43ce29063484e8d5e7f6d3d0f416a4e5.png

    今天你学废了吗de4c695d3ed775fb0681050918c56490.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值