C语言中的结构体和联合体:异同及应用

2023-12-27 08:30:54

C语言中的结构体和联合体:异同及应用

在C语言中,结构体(struct)和联合体(union)是两种常用的复合数据类型,用于组织和管理不同类型的数据。本文将介绍结构体和联合体的异同点,并通过代码示例演示它们的基本用法。

1. 结构体(Struct)的概述

结构体是一种用户自定义的数据类型,允许将多个不同类型的数据项组合在一起,形成一个单一的数据类型。结构体的成员在内存中是按照定义的顺序依次排列的,每个成员都有独立的内存空间。

代码示例:

#include <stdio.h>

// 定义结构体
struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    // 声明结构体变量
    struct Person person1;

    // 给结构体成员赋值
    strcpy(person1.name, "John Doe");
    person1.age = 25;
    person1.height = 1.75;

    // 访问结构体成员并输出
    printf("Person Information:\n");
    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Height: %.2f meters\n", person1.height);

    return 0;
}
Person Information:
Name: John Doe
Age: 25
Height: 1.75 meters

在上述例子中,我们定义了一个名为Person的结构体,包含了姓名、年龄和身高三个成员。通过结构体,我们能够更有组织地表示一个人的信息。

2. 联合体(Union)的概述

联合体是一种特殊的数据类型,允许在同一内存位置存储不同类型的数据。与结构体不同的是,联合体的所有成员共享同一块内存,即它们的内存地址是相同的。联合体的大小等于它最大的成员的大小。

代码示例:

#include <stdio.h>

union Number {
    int integer;
    float floating_point;
};

int main() {
    // 声明联合体变量
    union Number num;

    // 给整数成员赋值并输出
    num.integer = 42;
    printf("Integer value: %d\n", num.integer);

    // 给浮点数成员赋值并输出
    num.floating_point = 3.14;
    printf("Floating point value: %.2f\n", num.floating_point);

    return 0;
}
Integer value: 42
Floating point value: 3.14

在上述例子中,我们定义了一个名为Number的联合体,包含了整数和浮点数两个成员。通过联合体,我们能够在同一块内存中存储不同类型的数据。

3. 结构体与联合体的异同点

相同点:

  • 复合数据类型: 结构体和联合体都是用来定义复合数据类型的工具,可以包含多个不同类型的数据成员。

  • 成员访问: 成员访问方式相似,可以使用成员运算符.来访问结构体和联合体的成员。

不同点:

  • 内存分配方式:

    • 结构体: 成员在内存中按照定义的顺序依次排列,每个成员有独立的内存空间。
    • 联合体: 所有成员共享同一块内存,大小等于最大成员的大小。
  • 内存使用:

    • 结构体: 适用于需要同时存储多个不同类型的数据的情况。
    • 联合体: 适用于需要在同一块内存中存储不同类型的数据,但同时只使用其中一种类型的情况。
  • 成员占用空间:

    • 结构体: 成员占用独立的空间,每个成员的大小是其自身类型的大小。
    • 联合体: 成员共享同一块内存,只有一个成员的值是有效的,不同成员的大小不叠加。
代码说明
#include <stdio.h>

// 定义结构体
struct DataStruct {
    int intValue;
    float floatValue;
    char stringValue[20];
};

// 定义联合体
union DataUnion {
    int intValue;
    float floatValue;
    char stringValue[20];
};

int main() {
    // 输出结构体和联合体的大小
    printf("Size of struct DataStruct: %lu bytes\n", sizeof(struct DataStruct));
    printf("Size of union DataUnion: %lu bytes\n", sizeof(union DataUnion));

    return 0;
}


Size of struct DataStruct: 28 bytes
Size of union DataUnion: 20 bytes
  • 初始化:
    • 结构体: 可以分别对结构体的各个成员进行初始化。
    • 联合体: 只能对联合体的第一个成员进行初始化,因为同一时刻只能激活一个成员。

结论

结构体和联合体在C语言中是强大的工具,用于创建自定义的数据类型。选择使用结构体还是联合体取决于具体的需求,考虑到数据的组织方式、内存占用和访问方式等因素。合理使用这两种数据类型能够更好地满足程序设计的需要。

文章来源:https://blog.csdn.net/PengXing_Huang/article/details/135169974
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。