c语言结构共用体的作用,嵌入式学习笔记:c语言共用体和结构体的区别

c++中,结构体(struct)和共用体(union)是比较相似的复合数据类型,这两个都是用来存储多种数据的,但是他们之间还是有很大差距的,一起来了解

【1】共用体

(1)共用体的概念

在 C 语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型称为共用体,简称共用,又称联合体。

共用体在定义、说明和使用形式上与结构体相似。两者本质上的不同仅在于使用内存的方式上。

定义一个共用体类型的一般形式为:

union 共用体名

{

成员表列;

};

例如:

union gy

{

int i; char c; float f;

};

这里定义了一个共用体类型 union gy,它由三个成员组成,这三个成员在内存中使用共同的存储空间。

由于共用体中各成员的数据长度往往不同,所以共用体变量在存储时总是按其成员中数据长度最大的成员占用内存空间。

在这一点上共用体与结构体不同,结构体类型变量在存储时总是按各成员的数据长度之和占用内存空间。

例如,定义了一个结构体类型:

struct gy

{

int i;

char c;

float f;

};

则结构体类型 struct gy 的变量占用的内存大小为 2+1+4=7 个字节(不考虑字节对齐)。

在使用共用体类型变量的数据时要注意:在共用体类型变量中起作用的成员是最后一次存放的成员,

在存入一个新的成员后原有的成员就失去作用。如有以下赋值语句:

a.i = 1;

a.c = ’a’;

a.f = 1.5;

完成以上三个赋值运算以后,a.f 是有效的,a.i 和 a.c 已经无意义了。

在程序中经常使用结构体与共用体相互嵌套的形式。

即共用体类型的成员可以是结构体类型,或者结构体类型的成员是共用体类型。

例如,下列结构体类型 datas 的第三个成员是共用体类型:

struct datas

{

char *ps;

int type;

union

{

float fdata;

int idata;

char cdata;

}udata;

};

【2】typedef

(1)在 C 语言中,允许使用关键字 typedef 定义新的数据类型

其语法如下:

typedef

;

如:

typedef int INTEGER;

这里新定义了数据类型 INTEGER, 其等价于 int

INTEGER i; <==> int i;

(2) 在 C 语言中经常在定义结构体类型时使用 typedef,例如

typedef

{

struct _node_

int data;

struct _node_ *next;

} listnode, *linklist;

这里定义了两个新的数据类型 listnode 和 linklist。其中 listnode 等价于数据类型 struct _node_ 而 linklist 等价于 struct _node_ *

【3】

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值