本文介绍: int age;;int age;}stu1;·匿名结构体如果没有对结构体进行重命名的话,基本上只能使用一次。·结构体定义不分配地址,结构体变量会分配地址。·结构体变量的声明必须在主函数上或者主函数中位段的目的:节省空间struct Aint _a:2;int _b:5;////这里的数字是指比特位(bit)int _c:10;int _d:30;A就是位段的类型。位段A所占大小为8字节(原理。
1.结构体
1.1实际生活中一些东西往往有多个元素组成。如一名学生有身高、体重、名字、学号等。这时候就需要用到结构体。
1.2结构的声明(struct是结构体关键字)
1.先定义结构体类型,在定义结构体变量
2.定义结构体和变量
3.直接定义变量(匿名结构体)
·匿名结构体如果没有对结构体进行重命名的话,基本上只能使用一次。
1.3结构体的初始化(基于上述描述学生代码)
1.4结构体的访问
1.结构体成员的直接访问:成员访问操作符(.)
2. 结构体成员间接访问:
1.5typedef关键字与结构体
typedef主要目的是使结构体表达更加简洁,可以理解为给结构体重命名。
1.6结构体的自引用
上述写法正确吗?我们从sizeof(student)角度来分析,一个结构体包含自己显然它的大小就是无穷大,这是不合理的。所以想要一个结构体进行自引用,应该让结构体包含自己的指针
2.1结构体内存对齐
1.对齐规则
1.1结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址出
1.2其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
1.3结构体的总大小为最大对齐数的整数倍
1.4如果一个结构体中嵌套了别的结构体,嵌套结构体对齐到自己成员中最大对齐数的整数倍
2.为什么会存在内存对齐
1.平台原因(移植原因):
2.性能原因
3.修改默认对齐值(利用#pragma)
3.1结构体实现位段
1.什么是位段
1.1位段的成员必须是Int、unsigned Int、signed int 、char。在c99中位段成员的类型也可以选择其他类型 。
1.2位段的成员后边有一个冒号和一个数字。
1.4位段的空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟。
1.5位段涉及很多不确定的因素,位段是不跨平台的,注重可移植的程序应该避免使用位段
1.6开辟位段空间
2联合体
2.1联合体的声明
2.2联合体的特点
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。