结构体和联合体

结构体

结构体是一些值的集合,这些值成为它的成员。这和数组有些类似。

结构体和数组最大的不同是,数组的元素都是相同类型的,而结构体里的成员可以具有不同的类型。

数组元素可以通过下标来访问,而结构体成员长度可能不同,所以不能通过下标访问。

每个结构体成员都有自己的名字,所以结构体成员是通过名字访问的。

结构体变量属于标量,所以可以向对其他标量一样对结构体变量进行操作。

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 [联合体名]
{

    成员表;

}[变量表];

看上去和结构体差不多但是联合体的所有成员共享同一段内存(只为最长成员分配空间)

(未完待续)

猜你喜欢

转载自blog.csdn.net/qq_42379345/article/details/81274888