📜  C |结构与联合|问题9(1)

📅  最后修改于: 2023-12-03 15:29:44.208000             🧑  作者: Mango

C语言中的结构与联合

什么是结构?

在C语言中,结构是一种用户自定义数据类型,可以将不同类型的数据组合在一个单独的实体中。结构由一组数据成员组成,每个数据成员可以有自己的类型和名称。可以通过结构变量来访问结构中的任何数据成员,结构变量是在定义结构时声明的。

// 定义一个结构体
struct student {
    char* name;
    int age;
    char* major;
};
// 定义结构体变量并赋值
struct student john;
john.name = "John Doe";
john.age = 22;
john.major = "Computer Science";
什么是联合?

与结构类似,联合也是一种用户自定义数据类型。不同的是,联合是使用相同的内存位置来存储不同的数据类型。联合中所有的数据成员都是从同一个内存位置开始的,所以联合的大小取决于最大的数据成员的大小。

// 定义一个联合体
union data {
    int i;
    float f;
    char c;
};
// 定义联合变量并赋值
union data u;
u.i = 10;
printf("%d\n", u.i); // 输出10
u.f = 2.5;
printf("%f\n", u.f); // 输出2.500000
u.c = 'A';
printf("%c\n", u.c); // 输出A
结构与联合的区别
  1. 内存分配方式不同:结构分配的内存空间是按照各个成员的大小分别分配的,而联合分配的内存空间是根据联合中最大的成员分配的。

  2. 访问方式不同:结构的各个成员可以同时访问,使用“.”操作符;而联合只能访问一个成员,使用“.”操作符访问会出现问题。

  3. 存储方式不同:结构体的各个成员占用不同的内存单元,而联合体内的各个成员共用同一个内存单元,因此它们的值互相影响,只有最后一次赋值有效。

结构与联合的应用场景
  1. 结构常用于存储多个数据类型的信息,比如学生的姓名、年龄、性别、成绩等。在系统编程中,结构也常用于描述内存和网络中的数据结构。

  2. 联合一般用于占用空间比较大的数据类型进行存储优化,比如在TCP/IP协议中的数据包结构中,每个数据包都包括一个数据包头和数据包体,它们的大小不同,因此可以采用联合。

以上就是关于C语言中的结构体和联合体的介绍,希望对C语言初学者有所帮助。