C语言 -- 共用体

目录

前言

一、共用体的声明及变量的定义

二、共用体变量的大小

 三、共用体的使用


前言

有时候我们想用同一段内存单元存放不同类型的变量,把一个字符型变量,一个整型变量,一个实型变量放在同一个地址的内存单元中,当我们为其中一个赋值,就会把这个单元中之前赋的值覆盖掉,这就用到“共用体”类型的结构。

一、共用体的声明及变量的定义

共用体的声明和变量定义和结构体基本相同,只是共用体用的是“union”。

//格式如下                例子如下
union 共用体名            union Data
{                        {
    成员列表;                int a;
}变量列表;                  char b;
                            folat c;
                         } x,y,z;  //共用体变量

二、共用体变量的大小

共用体变量的大小一般是共用体中成员所占内存最大的成员内存。

要注意一点,共用体变量的内存大小一定是所有成员数据类型的整数倍,如果不是的,往上补

举个例子

#include 

union st   //共用体类型名可以随便起 
{
	int a;
	short b;
	char str[8];  //定义一个占8个字节的字符串 
}day; 

int main()
{
	printf("%d",sizeof(day)) ;  //输出共用体变量的大小
	return 0;
} 
  //输出:8;因为最大成员变量所占内存为8,所以共用体大小为8 

稍微改一下字符串的长度,再看一下

#include 

union st   //共用体类型名可以随便起 
{
	int a;
	short b;
	char str[13];  //定义一个占13个字节的字符串 
}day; 

int main()
{
	printf("%d",sizeof(day)) ;  //输出共用体变量的大小
	return 0;
} 
  //输出:16; 最大成员变量所占内存为13,但是所占空间
   不符合可以整除所有共用体成员的类型大小,所以应该往上
   至少补到16才能整除大小为4个字节的int型

 三、共用体的使用

看下面例子,可以知道,共用体只能存储一个值,只能保存最后一个赋值的成员的值

#include 
#include 

union st   //共用体类型名可以随便起 
{
	int a;
	float b;
	char str[8];  //定义一个占8个字节的字符串 
}stu; 

int main()
{
	stu.a = 10;        //共用体成员访问和结构体相同用 '.' 
	stu.b = 5.5;
	strcpy(stu.str,"hello");
	printf(" a:%d\n b:%f\n str:%s\n",stu.a,stu.b,stu.str);
	return 0;
}
//输出结果为  a:1819043176
             b:1143141483620823900000000000.000000
             str:hello

你可能感兴趣的:(C语言,c语言)