目录
一、结构体的基本概念
结构体(struct)就是用来存放一组不同类型的数据的,语法如下:
struct 结构体名
{
结构体成员变量一的声明;
结构体成员变量二的声明;
结构体成员变量三的声明;
......
结构体成员变量四的声明;
}; // 分号不要忘记
结构体是一个集合,是一种构造的数据类型,为了描述一个数据集自己定义出来的数据类型。结构体的成员(member)可以是任意类型的变量,也可以是结构体变量。
举个例子
struct boy
{
char name[51]; // 姓名
int age; // 年龄
int height; // 身高
int weight; // 体重
char figure[31]; // 身材
char face[31]; // 颜值
}; //记得加分号
二、结构体变量
结构体是一种自定义的数据类型,是模板,可以用它来定义变量。例如:
struct boy xiaoqiu1, xiaoqiu2, xiaoqiu3;
三、结构体占用的内存情况
理论上讲结构体的各个成员在内存中是连续存放的,和数组非常类似,但是,结构体的占用内存的总大小不一定等于全部成员变量占用内存大小之和。在编译器的具体实现中,为了提高内存寻址的效率,各个成员之间可能会存在缝隙。用sizeof可以得到结构体占用内存在总大小,sizeof(结构体名)或 sizeof(结构体变量名)都OK
举个例子
#include <stdio.h>
#include <string.h>
// 定义结构体
struct boy
{
char name[50]; // 姓名
int age; // 年龄
int height; // 身高
char figure[30]; // 身材
char face[30]; // 颜值
};
int main()
{
// 定义结构体变量
struct boy xiaoqiu;
printf("sizeof(struct boy) = %d\n",sizeof(struct boy));
printf("sizeof(xiaoqiu) = %d\n",sizeof(xiaoqiu));
return 0;
}
运行效果
从上面的例子可以看出,struct boy 全部成员变量占用的内存是50+4+4+30+30=118,但是结构体占用的内存却是 120
C语言提供了结构体成员内存对齐的方法,在定义结构体之前,增加以下代码可以使结构体成员变量之间的内存没有空隙
#pragma pack(1) // 在头文件添加
再次运行
四、结构体的变量名
和数组不一样,结构体变量名不是结构体变量的地址,