一、union在c和c++语言中的特性
1.共享内存空间:union的所有成员共享同一块内存空间。意味着在同一时刻,union 只能存储其成员 中的一个值。当你修改了union中的一个成员,那么其它成员的值也会被改变,因为它们实际上都是指向同一块内存区域的不同解释。
2.大小由其最大成员决定:union的大小至少等于其最大成员的大小。编译器会确保 union 有足够的空间来存储其最大成员,但也可能为对齐而增加额外的填充字节。
二、大小端:描述了多字节数据(如整数、浮点数等)在内存中的字节排列方式。
1.大端:将数据的最高有效字节存储在内存的最低地址处,而将最低有效字节存储在内存的最高地址处。
2.小端:将数据的最低有效字节存储在内存的最低地址处,而将数据的最高有效字节存储在内存的最高地址处。
以下是一个使用联合体检测大小端的示例代码:
#include <stdio.h>
int main()
{
union
{
int i;
char c[sizeof(int)];
} u;
u.i = 0x12345678;
if (u.c[0] == 0x12 && u.c[1] == 0x34 && u.c[2] == 0x56 && u.c[3] == 0x78)
{
printf("大端模式");
}
else if (u.c[0] == 0x78 && u.c[1] == 0x56 && u.c[2] == 0x34 && u.c[3] == 0x12)
{
printf("小端模式");
}
else
{
printf("未知大小端");
}
printf("\n");
return 0;
}
输出:
在这段代码中,定义了一个联合体u,它包含一个整型变量i和一个字符数组c。通过将整型变量i赋值为0x12345678,然后检查字符数组c中各个元素的值,可以判断当前计算机是大端模式还是小端模式。