union 分析

本文详细解析了C语言中union共用体和struct结构体的概念及使用方式,通过具体示例展示了不同数据类型如何共享同一段内存空间以及结构体的内存分配原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

union st
{
    int a;
    char b;
};
int main()
{
    union st s;
    char *p = (char*)&s;
    s.a = 0x3132;
    s.b = 0x33;
    printf("%c", *p);
}

A.1
B.2
C.3
D.不确定 

union是用来定义共用体结构体的,顾名思义就是几个变量共用一个内存空间

union st
{
    int a;
    char b;
};

就是在一块空间内存中存放一个int类型数据或者一个char型数据,也就是说在同一时间内这个结构体里只能够存在一种类型的数据

s.a = 0x3132;  //执行完内存中存放0x3132
s.b = 0x33;    //执行完内存中存放0x33,覆盖掉原先的0x3132
printf("%c", *p); //0x33输出字符 3

答案 “C

 

扩展:

#include <stdio.h>

union U 
{ 
    char st[4]; 
    int i; 
    long l; 
};
struct A 
{ 
    int c;
    union U u; 
}a;
int main()
{
    printf("%d\n", sizeof(a));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(long));
    getchar();
}

A.4
B.5
C.6
D.8

A.4
B.5
C.6
D.8

union共用体变量的内存长度是取各成员变量中最长的

struct结构体变量的内存长度是各成员栈内存长度之和,并且存在内存对齐问题

 

 win32win64linux32linux64
int2444
long4448
union4448
struct8(对齐)8816(对齐)

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值