【C语言经典编程技术】C语言中union与struct的区别及sizeof的计算方式

本文详细探讨了C语言中union和struct的差异,特别是sizeof运算符在两者上的应用。讲解了union如何共享内存以及struct中成员的内存对齐策略,并通过实例分析sizeof的结果,揭示了编译器在内存分配上的规则。
摘要由CSDN通过智能技术生成

C语言中union与struct的区别

在C语言中结构体和联合具有细微差别,特别是使用sizeof()对其求大小时,许多刚刚接触C语言不久的朋友对此非常困惑,下面我将简单谈一下自己对union与struct之间的区别

联 合(union)

  1. 联合说明和联合变量定义
    联合也是一种新的数据类型, 它是一种特殊形式的变量。
    联合说明和联合变量定义与结构十分相似。其形式为:
    union 联合名{
    数据类型 成员名;
    数据类型 成员名;

    } 联合变量名;
    联合表示几个变量共用一个内存位置, 在不同的时间保存不同的数据类型 和不同长度的变量。

union A
{
int a[5];
char b;
double c;
}Air;

表示声明了一个名称为A的联合,可以使用A variable 来定义联合变量。

在联合变量 variable中 整型和字符型以及double型共用同一内存位置。

当一个联合被说明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度。
联合访问其成员的方法与结构相同。同样联合变量也可以定义成数组或指针,但定义为指针时, 也要用"->"符号, 此时联合访问成员可表示成:
联合名->成员名
另外, 联合既可以出现在结构内, 它的成员也可以是结构。

union
{
int i;
struct
{
char first;
char second;
}half;
}number;

2.结构的定义

定义一个结构的一般形式为:
struct 结构名
{
成员表列
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值