C语言——联合(共同体)

目录

1.联合的概念

2.联合的定义与声明

2.1联合的定义

 2.2联合的声明

3.联合的初始化与使用

3.1联合变量的初始化

3.2 使用点操作符访问联合成员

4.联合体的大小

5.联合与结构体的区别

6.总结


1.联合的概念

联合(Union)是C语言中一种特殊的数据结构,与结构体(Struct)类似,但有着显著不同的内存分配方式。联合允许在同一内存位置存储不同类型的数据,因此在内存节省和特定场景下非常有用。本文将详细介绍C语言中的联合,包括定义、声明、初始化、使用、联合与结构体的区别、位域联合、联合与函数、以及实际应用场景等内容。

2.联合的定义与声明

2.1联合的定义

在C语言中,联合使用关键字union定义。与结构体一样,联合也包含多个成员,但所有成员共用一块内存。

union Data {
    int i;
    float f;
    char str[20];
};

在上述示例中,定义了一个名为Data的联合,包含三个成员:i(整型),f(浮点型),和str(字符串数组)。

 2.2联合的声明

联合定义完成后,可以声明联合类型的变量。联合变量的声明方式与其他变量类似,只需在变量名前加上联合类型。

union Data data;

3.联合的初始化与使用

3.1联合变量的初始化

联合变量可以在声明时进行初始化,但由于联合的特性(所有成员共用一块内存),初始化时只能为一个成员赋值。 

union Data data = {10}; // 初始化整型成员i

也可以在代码中随时访问和修改联合的成员:

data.f = 220.5; // 修改浮点型成员f
strcpy(data.str, "C Programming"); // 修改字符串成员str

需要注意的是,由于联合的所有成员共用同一块内存,因此在同一时间只能使用一个成员。访问一个成员后再访问另一个成员时,前一个成员的值可能会被覆盖。

3.2 使用点操作符访问联合成员

可以使用点操作符(.)来访问联合变量的成员。

printf("Integer: %d\n", data.i);
printf("Float: %f\n", data.f);
printf("String: %s\n", data.str);

4.联合体的大小

联合的大小至少是最大成员的大小。

当最大成员的大小不是最大对齐数的整数倍时,就要对齐的最大对齐数的整数倍。

例:

#include <stdio.h>
union Un{
    char arr[5];//5
    int i;//4
};
int main()
{
    printf("%ld\n",sizeof(union Un));
    return 0;
}

运行结果:

5.联合与结构体的区别

联合与结构体在语法上非常相似,但它们在内存分配和使用方式上有很大区别:

内存分配:结构体的每个成员都有独立的内存空间,总大小是所有成员大小之和。而联合的所有成员共用同一块内存,总大小是最大成员的大小。


成员访问:在结构体中,所有成员可以独立访问和修改;在联合中,每次只能使用一个成员,访问一个成员后再访问另一个成员会导致前一个成员的值被覆盖。


用途:结构体用于存储相关的不同类型数据,而联合用于在不同时间存储不同类型的数据,节省内存空间。

6.总结

联合是C语言中强大且灵活的数据结构,可以帮助我们在不同场景下高效地管理和处理数据。在本文中,我们详细介绍了联合的定义、声明、初始化、使用、大小、联合与结构体的区别等,掌握这些知识,能够大大提高编写高效、可维护的C程序的能力。

希望这篇文章对你理解和使用C语言中的联合有所帮助。如果有任何疑问或建议,欢迎在下方留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值