ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

结构体对齐和枚举类型

2021-12-27 20:59:51  阅读:160  来源: 互联网

标签:week Sun enum Tues 枚举 Mon 类型 对齐


一.

自定义扩展类型:enum(枚举)struct(结构体)union(联合/共用)

1.枚举:增加代码的可读性

在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。此时可以使用枚举类型来增加代码的可读性。

例如,列出一个星期有几天:

  1. enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };

可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues ...... Sun 对应的值分别为 0、1 ...... 6。
我们也可以给每个名字都指定一个值:

2.enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };

更为简单的方法是只给第一个名字指定值:

3.enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };

这样枚举值就从 1 开始递增,跟上面的写法是等效的。

4.可以用typedef来简化:typedef enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;

day aa;   //创建一个枚举类型的变量

aa=Mon;

二.

结构体的内存对齐的问题:

对于结构体的内存计算并不是直接将每个成员变量所占字节数直接相加,而是要保证一定的对齐规则。

如:

struct Test
{
    double c; 	//8
    int a;		//4
    char b;		//1
} test;

输出为:8+8=16而不是8+4+1=13。

相加的时候必须保证前面的成员变量的内存所占内存必须是下一个成员变量所占内存的整倍数,如果不够就补上;并且最后的结果必须要是所占内存空间最大的成员变量的整倍数。也就是说要以double所占字节数8为基准进行补齐。

struct Test
{
    int a;		//4
    double c; 	//8
    char b;		//1
} test;

输出为:8+8+8=24

对于有数组的情况则以单个单元的字节数为基准而不是全部数组的字节数

​
struct a
	{
		char c[10];  //1
		char b;      //1
	};

​

输出为:11

而对于成员中有指针变量。对于32为操作系统指针占4个字节而64位占8个字节。

标签:week,Sun,enum,Tues,枚举,Mon,类型,对齐
来源: https://blog.csdn.net/apple_51801179/article/details/122178009

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有