初出茅庐的小李博客之C语言必备知识共用体

C语言必备知识共用体

共用体是一种构造数据类型,有时候也称之为联合体。
它的用途:
使几个不同类型的变量共占一段内存。

共用体举例

union 共用体名
{ 
	类型标识符    成员名;
	类型标识符    成员名;
};
union data    //共用体名字是data
 {   
 	int i;    //整型数据
    char ch;  //字符型数据
    float f;  //浮点型数据
 };

共用体特点

共用体变量任何时刻只有一个成员存在
共用体变量定义分配内存的长度=最长成员所占字节数

验证一下

#include  //printf scanf fputc

union data    //共用体名字是data
 {   
 	int i;    //整型数据
    char ch;  //字符型数据
    float f;  //浮点型数据
 };
 
union data dddd; 
int main(void)
{
 	printf("共用体内存是:%d\r\n",sizeof(dddd));//实际打印的是float所占内存大小
	printf("float内存是:%d\r\n",sizeof(float));//实际打印的是float所占内存大小 
	printf("int内存是%d\r\n",sizeof(int));
	printf("char内存是:%d\r\n",sizeof(char));
 	return 0;
}

共用体变量里面内存的大小可以说跟float内存大小一样。也可以说是跟int大小一样,这里都是4个字节。

共用体变量的定义

//定义共用体的时候把变量写在共用体的后面 例如这里的a b都是共用体类型的变量名
union data 
{ 
  int i;
  char ch;
  float f;
}a,b;

//用共用体来定义 dddd就是共用体类型的变量名
union data dddd; 

//共用体指针定义
union data *p;

//共用体数组定义
union data d[3];

//省略类型名字的 共用体变量 a b c
union 
{ 
   int i;
   char ch;
   float f;
 } a,b,c;
 

测试代码如下

union 
{ 
   int i;
   char ch;
   float f;
} a,b,c;

int main(void)
{
 	printf("共用体内存是:%d\r\n",sizeof(a));//实际打印的是float所占内存大小
	printf("float内存是:%d\r\n",sizeof(float));//实际打印的是float所占内存大小 
	printf("int内存是%d\r\n",sizeof(int));
	printf("char内存是:%d\r\n",sizeof(char));
 	return 0;
}

共用体变量的引用方式3种

  • 共用体变量名.成员名
  • 共用体指针名->成员名
  • (*共用体指针名).成员名

跟结构体非常相似 变量访问用点、指针访问用箭头、星号可以把指针的内容取出。


	dddd.i = 1;
    printf("dddd.i  = %d\r\n",dddd.i);
    
	dddd.ch = 'm';
	printf("dddd.ch = %c\r\n",dddd.ch);

	dddd.f = 1.3;
	printf("dddd.f  = %f\r\n",dddd.f);

注意:

  • 同一个内存段可以用来存放几种不同类型的成员,但在每 一瞬时只能存放其中一种,而不是同时存放几种。
  • 共用体变量中起作用的成员是最后一次存放的成员 只保留了1.3

初出茅庐的小李博客之C语言必备知识共用体_第1张图片

  • 共用体变量和它的各成员的地址都是同一地址

初出茅庐的小李博客之C语言必备知识共用体_第2张图片
至此,共用体的知识点简单说完了。

附上代码:

#include  //printf scanf fputc

union data    //共用体名字是data
 {   
 	int i;    //整型数据
    char ch;  //字符型数据
    float f;  //浮点型数据
 };
union data dddd; 

union data *p; 
int main(void)
{
	dddd.i = 1;
	dddd.ch = 'm';
	dddd.f = 1.3;
    printf("dddd.i  = %d\r\n",dddd.i);
    printf("dddd.ch = %c\r\n",dddd.ch);
    printf("dddd.f  = %f\r\n",dddd.f);
    printf("i地址  = %p\r\n",&dddd.i);
    printf("ch地址 = %p\r\n",&dddd.ch);
    printf("f地址  = %p\r\n",&dddd.f);
 	return 0;
}

你可能感兴趣的:(C语言相关,STM32,c语言,开发语言)