C语言中的union用法

union共用声明和共用一变量定义:

“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型,

一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,

以达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。

另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。

共用体(参考“共用体”百科词条)是一种特殊形式的变量,使用关键字union来定义

共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似。其形式为:

union 共用体名{

数据类型 成员名;

数据类型 成员名;

...

} 变量名;

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

在union中,所有的共用体成员共用一个空间,

并且同一时间只能储存其中一个成员变量的值。

1、union中可以定义多个成员, union的大小由最大的成员的大小决定。

2、union成员共享同一块大小的内存, 一次只能使用其中的一个成员。

3、对某一个成员赋值,会覆盖其他成员的值(因为他们共享一块内存。

但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,

比如对char成员赋值就不会把整个int成员覆盖掉,

因为char只占一个字节,而int占四个字节

4、联合体union的存放顺序是所有成员都从低地址开始存放的。

例如下列代码:

//共用体C语言
//杨鑫
#include <stdio.h>
#include <stdlib.h>
typedef union
{
	char c;
	int a;
	int b;
}Demo;
int main()
{
	Demo d;
	d.c = 'H';
	d.a = 10;
	d.b = 12;
	printf("最开始时变量所占的字节长度为: %d\n", sizeof(d)/4);
	printf("赋值后的三个值分别为:\n");
	printf("%c\t%d\t%d\n", d.c, d.a, d.b);
	return 0;

}

如图:

时间: 2024-10-08 20:50:43

C语言中的union用法的相关文章

C语言中qsort函数用法

C语言中qsort函数用法-示例分析  本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort函数包含在<stdlib.h>的头文件里,本文中排序都是采用的从小到大排序. 一.对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num

浅析C语言中assert的用法(转)

原文地址:http://www.jb51.net/article/39685.htm 以下是对C语言中assert的使用方法进行了介绍,需要的朋友可以参考下. assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression );assert的作用是先计算表达式expression,如果其值为假(即为0),那么它先向标准错误流stderr打印一条出错

(转)C语言中extern的用法

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”. 1. extern修饰变量的声明.举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v.这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c中声明extern int v,还取决于变量v本身是能够被引用到的.这涉及到c语言的另外一个话题--变量的

c语言中assert的用法

1 /************************************************************************* 2 > File Name: assert.c 3 > Author: Mr.Yang 4 > Purpose:演示函数assert的用法 5 > Created Time: 2017年05月29日 星期一 19时57分54秒 6 **************************************************

C语言中的union

1.union中可以定义多个成员,union的大小由最大的成员的大小决定. 2.union成员共享同一块大小的内存,一次只能使用其中的一个成员,与struct形成鲜明对比. 3.对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存.但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节) 4.联合体union的存放顺序是所有成员都从低地址开始存放的.下面看一个简单的

C语言中sizeof的用法

今天同学问我sizeof可不可以计算结构体的大小,我竟然忘了C语言还有sizeof这个函数,我是多久没有写程序了啊!!!惭愧,上研究生后写嵌入式方面的程序就特别少了,看来以后还要经常来练练手才行.现在转载一篇看到的sizeof用法的文章,与大家分享(第一篇技术类的文章竟然是转载的,惭愧). #include "stdio.h" #include "string.h" #include "stdlib.h" int main() { short i

C语言中的union使用方法

union共用声明和共用一变量定义: "联合"是一种特殊的类.也是一种构造类型的数据结构.在一个"联合"内能够定义多种不同的数据类型. 一个被说明为该"联合"类型的变量中,同意装入该"联合"所定义的不论什么一种数据,这些数据共享同一段内存, 以达到节省空间的目的(另一个节省空间的类型:位域). 这是一个很特殊的地方,也是联合的特征. 另外,同struct一样,联合默认訪问权限也是公有的,而且,也具有成员函数. 共用体(參考&q

C语言中#define的用法(转)

今天整理了一些#define的用法,与大家共享! 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){.........} 编译器在处理这个代码之前会对MAXTIME进行处理替换为1000. 这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出. 2.define的“函数定义”

C语言中system函数用法解释

system函数 是可以调用一些DOS命令,比如system("cls");//清屏,等于在DOS上使用cls命令 ================================================================下面列出常用的DOS命令,都可以用system函数调用:ASSOC 显示或修改文件扩展名关联.AT 计划在计算机上运行的命令和程序.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.CACLS 显示或修改文件的访