当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

C语言union和struct什么时候用union比struct更好解释就可以了

更新:03-03 整理:39baobao.com
字体:

[C语言结构体Struct怎么使用]在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们...+阅读

对于一个union类型的变量,所有成员变量共享一块内存,该内存的大小有这些成员变量中长度最大的一个来决定 union分配的内存是连续的。

那为什么要发明union呢?这是由于union的特性决定的,因为struct中成员变量虽然内存都是独立的,但是struct不能保证分配的内存是连续的。

举个例子:CPU的ax寄存器分为ah和al两部分,我们现在要给其赋值,就可以采用union:

union _ax_register {

int i; // 4Bytes, union将按此分配一个4字节的连续内存

unsigned short ah; // 2 Bytes

unsigned short al; // 2 Bytes

} ax_register;

现在,给ax_register.i赋值,其高16bit就会赋给ah,低16bit就会赋给al,是不是很方便呢?

再举个例子,IP地址,我们使用union,就可以直接给他赋一个int值,就能给IP的四个段同时赋值,如果用struct,就麻烦多喽,如下:

union _ip_address {

int i; // spaceholder

unsigned char ip_first_num;

unsigned char ip_second_num;

unsigned char ip_third_num;

unsigned char ip_fourth_num;

} ip_address;

这样,给ip_address.i 赋值,就自动将其8bit 8bit的赋给了四个IP字段。是不是很方便?更方便的是,现在要比较两个IP地址的大小,只要比较这个int值就OK了

请问union是什么意思

和struct一样,union只有先定义了共用体变量才能引用它。而且不能直接引用共用体变量,而只能引用共用体变量中的成员。就像我上面定义的union test。我们不能像下面这样直接引用union:

union test a;

printf("%d", a);

这种直接引用是错误的,由于a的存储区有好几种类型,分别占不同长度的存储区,仅写共用体变量名a,这样使编译器无法确定究竟输出的哪一个成员的值。所以,应该写成下面这样:

printf("%d", a.mark);

同时,在使用union的时候,我们还需要注意以下的几点:

同一个内存段可以用来存放几种不同类型的成员,但在每一个时刻只能存在其中一种,而不是同时存放几种。也就是说,每一瞬间只有一个成员起作用,其它的成员不起作用,即不是同时都存在和起作用。

C语言中联合体union的使用

联合体又被称为共用体,我个人感觉,共用体名字更合理。

和结构体同属于C语言数据类型中的结构类型。

例如

uniuon data{ int i ; char c ;float f;}x;定义共用体类型名称为data类型,有三个属性,分别为

int i ; char c ;float f;这三个属性共同占用内存空间,所以空间占用选属性中占用最多的那个,也就是float f。占用四个字节。由于共同占用,所以在同一时间只能保留一个属性内容

如果为

struct data{ int i ; char c ;float f;}x;则表明定义结构体类型名称为data类型,也是三个属性,不过在内存中占用的是空间大小是三个属性之和。若int类型在编译器中分配4字节的话,总共分配字节数位4+1+4总共9字节。

由于单独占用,所以在同一时间可以保留所有属性内容

本文地址:https://www.39baobao.com/show/29_47496.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

C语言结构体中struct和typedef struct有什么区别C语言结构体中struct和typedef struct区别为:声明不同、访问不同、重新定义不同。 一、声明不同 1、struct:struct可以直接使用结构体名字声明结构体。 2、typedef struct:ty...

关于C语言中的typedef和struct的用法问题typedef int INT; /*尾部要有“;”*/ INT a;相当于int a; typede int* INT_P; INT_P p = &a; 相当于int *p = &a; 注意 #define INT_P int* (INT_P a, b; 相当于int *a; int b;)...

C语言 typedef struct这段代码的作用是什么typedef struct { char score; /*字符型 编号*/ char name[10]; /*字符型 可以存10个变量 姓名*/ char number[15]; /*号码*/ char email[20]; /*邮箱*/ char age[8]; /*年龄*/ c...

C语言的typedef struct s ss的意义#include<stdio.h> struct s { int a; char c; }; typedef struct s ss; void main() { ss k; k.a=1; k.c='A'; printf("%d,%c\n",k.a,k.c); } //typedef 是给类型 弄个别名...

一个很基础的C语言问题: typedef struct stu和 typedef str有。 第一种 只定义了一个类型stu 第二种,除了类型stu以外,还给struct起了一个名字 stu。 也就是说,按照第二种写法, stu a; struct stu b; 这两种写法都可以。 而第一种 只能 s...

c语言 union意思?英文直译就是联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值。设有一个教师与学生通用的表格,教师数据有姓名,年龄,职业,教研室...

C语言union的用法1、我们利用C语言定义一个简单的Union共用体结构。 2、在这个结构中包含若干个属性,其中有Int、Char和Double型。 3、此时我们还能利用Typedef关键字,去重名Union共用体。 4、...

c语言中的union是什么意思啊c语言中的union是什么意思啊,C语言中联合的主要作用是什么:c语言中的union是联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值...

C语言中联合体union的使用C语言中联合体union的使用,C语言union关键字的适用场合是什么:联合体又被称为共用体,我个人感觉,共用体名字更合理。 和结构体同属于C语言数据类型中的结构类型。 例如 uniuon d...