结构体
结构体是一些值的集合,这些值成为它的成员。这和数组有些类似。
结构体和数组最大的不同是,数组的元素都是相同类型的,而结构体里的成员可以具有不同的类型。
数组元素可以通过下标来访问,而结构体成员长度可能不同,所以不能通过下标访问。
每个结构体成员都有自己的名字,所以结构体成员是通过名字访问的。
结构体变量属于标量,所以可以向对其他标量一样对结构体变量进行操作。
1. 结构体的声明
结构体声明时,必须列出它所包含的所有成员的名字和类型。
struct [结构体名]
{
成员列表;
}[变量表];
注意,在声明结构体后要加分号 ' ; '。
变量表里可以不写,如果有在变量表里写变量,则表明在声明这个结构体同时创建了变量。
几个例子。
struct info{
int id;
char name[20];
float height;
};
这个声明创建了一个叫 info 的结构体,这个结构体包含三个成员:一个整数id,一个字符串name,一个浮点数height
struct info{
int id;
char name[20];
float height;
}y[20], *z;
这个声明创建了一个 struct info 类型的 y 和 z,y是一个数组,它包含20个结构体,z是一个指针,它指向struct info类型。
2. 结构体的调用
以上面定义的结构体变量y和z为例
scanf("%d %s %f", &y[i].id, y[i].name, &y[i].height);
printf("%d,%s,%f", y[i].id, y[i].name, y[i].height);
scanf("%d %s %f", &z->id, z->name, &z->height);
printf("%d,%s,%f", z->id, z->name, z->height);
3. 结构体长度规则
(1) 结构体的总长度一定是最长成员的整数倍(double除外)
(2) 每个成员的偏移量一定是该成员长度的整数倍。
联合体
联合体的声明
union [联合体名]
{
成员表;
}[变量表];
看上去和结构体差不多但是联合体的所有成员共享同一段内存(只为最长成员分配空间)
(未完待续)