1.结构体变量的定义和初始化
结构体变量的定义
struct point
{
int x;
int y;
}p1; //声明类型的同时定义变量p1
struct point p2; //定义结构体变量p2
结构体变量的初始化
struct point={x,y}; //定义变量的同时赋值
struct Stu
{
char name[20];
int age;
};
struct Stu s={"zhangsan",20};
2.结构体变量的大小计算
结构体大小的计算涉及到了结构体内存对齐的问题!
结构体的对齐规则:
- 第一个成员在与结构体变量偏移量为0的地址处;
- 其他成员变量要对齐到对齐数的整数倍的地址处;(对齐数=编译器默认的对齐数与该成员大小的较小值)
- 结构体的大小是最大对齐数的整数倍;
- 如果一个结构体中嵌套了一个结构体,那么嵌套的结构体对齐到自己的最大对齐数的整数倍,结构体的整体大小就是所有最大对齐数的整数倍;
为什么存在内存对齐?
数据结构应该尽可能的在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要做两次内存访问,而对齐的内存访问只需要一次访问;总体来说,结构体的内存对齐是拿空间来换取时间。
3.举例计算结构体的大小
struct S
{
char c1;
char c2;
int i;
};
printf("%d\n",sizeof(struct S));
运行结果如下: