结构体和联合体

本文详细介绍了结构体和联合体的概念及使用方法。结构体是一些值的集合,成员可以有不同的类型,并通过名字访问。联合体的所有成员共享同一段内存,只分配最长成员的空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体

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

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

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

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

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

 

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

    成员表;

}[变量表];

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

 

(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值