本文主要包括:
1.结构体变量的创建与初始化。
2.结构体内存对齐
结构体是一种自定义数据类型,可以将不同的数据类型组合成一个整体数据类型。
结构体的作用:
1.将不同类型的数据组合成结构体,方便进行统一管理和操作。
2.在函数之间传递结构体,可以将多个参数合并为一个结构体参数,避免参数列表过长的情况。
3.使用结构体可以方便地进行数据的排序、查找和修改等操作。
4.结构体可以作为函数返回值,方便函数返回多个值。
5.结构体可以嵌套,构建出复杂的数据结构。
6.结构体可以用于面向对象编程中的类和对象的概念
如何创建结构体。
结构体声明形式:
struct stu {
<成员1类型> <成员1名称>;
<成员2类型> <成员2名称>;
...
};
其中struct是结构体的关键字,stu是结构体的名称,可以是任何名字。
正如结构体定义一样这个只是一个数据类型。就像 int、float、double等一样,只是其中放入的数据由我们自己决定。
结构体变量:
为了使用自己创立的结构体,我们就需要创立和初始化结构体变量。如:
struct Stu s = { “张三”, 20, “男”, “20230818001” };这样s就是一个结构体变量。
结构体内存对齐。
两结构体字节大小:
#include <stdio.h>
struct s
{
char a;
int c;
char b;
};
struct s2
{
char a;
char b;
int c;
};
int main()
{
printf("%zd\n", sizeof(struct s));
printf("%zd\n", sizeof(struct s2));
return 0;
}
结果:虽然两个结构体内容一样,但大小不一样。
为解开困惑这就涉及到结构体的内存对齐。
结构体对齐规则:
1.首元素永远从第一个字节开始,自身多大就占用几个字节。
2.余下的开始遵循对齐数。
对⻬数 = 编译器默认的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值。(VS 中默认的值为 8; Linux中 gcc 没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩)。
3.余下变量起始位置总结为前面所占用的字节数要是该变量所占字节数的整数倍,不够就空直到够。
4. 最后结构体总大小:
结构体所占的总字节数要是其成员变量中所占字节最大的那个变量的整数倍,不够就补齐。
假设struct s从此处开始
此时struct s所占字节数是9,最后根据规则4而补齐得到12。
struct s2也是一样。