1. 结构体(Struct)
在 C 语言中,结构体是一种自定义的复合数据类型,允许将不同数据类型的变量组合成一个单一的实体。结构体可以包含多个成员,每个成员可以是不同的数据类型,如整数、浮点数、字符、数组等。
结构体的定义通常在函数外部,并且在函数内部可以声明和使用结构体类型的变量。结构体的定义包含了结构体的名称和结构体成员的列表,每个成员都有一个名称和一个数据类型。结构体的成员可以通过成员运算符(.)来访问。
以下是一个简单的 C语言 结构体的示例:
#include <stdio.h>
// 定义一个名为Student的结构体
struct Student {
int roll_no; // 学号
char name[50]; // 姓名
int age; // 年龄
float score; // 分数
};
int main() {
// 声明并初始化一个Student类型的结构体变量
struct Student student1 = {101, "Alice", 20, 95.5};
// 访问结构体成员并输出
printf("Roll No: %d\n", student1.roll_no);
printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("Score: %.2f\n", student1.score);
return 0;
}
2. 联合体(Union)
在 C 语言中,联合体是一种特殊的数据结构,可以在内存中共享同一段存储空间来存储不同类型的数据。与结构体类似,联合体也是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。
联合体的定义使用关键字‘union’,后面紧跟联合体的名称和一对花括号,括号中定义了联合体的成员变量,每个成员变量有自己的名称和数据类型。
#include <stdio.h>
// 定义一个联合体
union Data {
int i;
float f;
char c;
};
int main() {
union Data data; // 声明一个联合体变量data
data.i = 42; // 给联合体的整数成员赋值
printf("data.i = %d\n", data.i); // 输出整数成员的值
data.f = 3.14; // 给联合体的浮点数成员赋值
printf("data.f = %.2f\n", data.f); // 输出浮点数成员的值
data.c = 'A'; // 给联合体的字符成员赋值
printf("data.c = %c\n", data.c); // 输出字符成员的值
// 注意:联合体的不同成员共享同一块内存空间,赋值一个成员会影响其他成员的值
printf("data.i = %d, data.f = %.2f, data.c = %c\n", data.i,data.f, data.c);
//data.i = 1078523201, data.f = 3.14, data.c = A
return 0;
}
3.联合体与结构体的区别
结构体 | 联合体 | |
关键字 | struct | union |
成员 | 多个成员 | 多个成员 |
存放 | 每个成员都有自己的内存空间 | 所有成员共用同一块内存空间 |
4.实例分析
定义联合体
main.c
调试过程中,可以看到各个变量如下:
这说明联合体所有成员都存储在同一个空间中,每个成员不可能同时使用。