首页 > 其他分享 >【C语言】自定义类型:联合和枚举

【C语言】自定义类型:联合和枚举

时间:2023-12-03 17:32:56浏览次数:45  
标签:自定义 int 联合体 C语言 char union 枚举 un

1、联合体

1.1、联合体类型的声明

像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共用体。

给联合体其中⼀个成员赋值,其他成员的值也跟着变化。

#include <stdio.h>

//联合类型的声明 
union Un
{
 char c;
 int i;
};

int main()
{
 //联合变量的定义 
 union Un un = {0};
 //计算连个变量的⼤⼩ 
 printf("%d\n", sizeof(un));

 return 0;
}

【C语言】自定义类型:联合和枚举_联合类型

为什么上面联合体变量的大小是4呢?

联合体un只有两个成员,char c; int i;c 大小1个字节,i是最大的成员4个字节。

那么因为它们共用同一块空间,所以四个字节就够了。

4个字节既可以放得下c ,也能放得下i。

总结:联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

1.2、联合体的特点

如何证明是共用的同一块内存空间呢?

//代码1
union Un
{
  int i;
  char c;
};
int main()
{
  union Un un;
  // 下面输出的结果是一样的吗?
  printf("%p\n", &(un.i));
  printf("%p\n", &(un.c));
  return 0;
}

如果共用一块空间,那地址肯定是一样的

标签:自定义,int,联合体,C语言,char,union,枚举,un
From: https://blog.51cto.com/u_16189938/8668708

相关文章

  • 【C语言】浮点数在内存中的存储
    常⻅的浮点数:3.14159、1E10等,浮点数家族包括:float、double、longdouble类型。 浮点数表⽰的范围:float.h中定义我们先通过一道题目来了解:#include<stdio.h>intmain(){intn=9;float*pFloat=(float*)&n;printf("n的值为:%d\n",n);printf("*pFloat的值为:%f\n",......
  • 《初学C语言第14天》
    ////结构体成员的访问//#include<stdio.h>//typedefstructstu//{// //成员变量// charname[20];// shortage;// chartele[12];// charsex[7];//}Stu;//voidPrint1(Stutmp)//形参tmp//形参是实参的一份临时拷贝,且此块空间放到其他的位置上即tmp位置上(存在空间浪费......
  • C语言基础知识
    C语言的特点关键字(32个):auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、static、sizeof、struct、switch、typedef、union、unsigned、void、volatile、while......
  • 【C语言】自定义类型:结构体
    1、结构体类型的声明1.1、结构体的概念结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。1.2、结构的声明structtag{member-list;}variable-list;在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。以下为实例://此声明......
  • C语言冒泡排序法
    引言冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。冒泡的实现在细节上可以有很多种变化。最简单排序实现/*对顺序表L做交换排序*/voidBubbleSortO(SqList*L){ inti,j;for(i=1;i<L->length;i++) { fo......
  • streamlit 展示自定义 html 以及 css
    目前探索出来的有效方法:style="""<style>.memo-box{border:1pxsolid#ccc;padding:10px;margin-bottom:20px;}.tag{font-size:12px;color:#88......
  • Java开发者的Python快速进修指南:自定义模块及常用模块
    好的,按照我们平常的惯例,我先来讲一下今天这节课的内容,以及Java和Python在某些方面的相似之处。Python使用import语句来导入包,而Java也是如此。然而,两者之间的区别在于Python没有类路径的概念,它直接使用.py文件的文件名作为导入路径,并将其余的工作交给Python解释器来扫描和处理。另......
  • C语言概述
    1.为什么要学习C语言1>.C语言的起源和发展程序设计语言的发展:机器语言(低级语言)——汇编语言(中级语言)——高级语言低级语言:使用的是一串二进制代码中级语言:使用助记符(英文单词)来代替一串二进制代码(容易记忆,不容易出错)高级语言:......
  • Spring是如何解析自定义的xml标签
    SpringSPISpring借鉴了JavaSPI思想来解析各种标签,我们称之为SpringSPI。SpringSPI沿用了JavaSPI的设计思想,但在实现上和JavaSPI及DubboSPI也存在差异,Spring通过spring.handlers和spring.factories两种方式实现SPI机制,可以在不修改Spring源码的前提下,做到对Spring框架的扩......
  • C语言之文件(下 · 重要)
    在上一篇文章中,我讲述了有关ASCII文件的读写,那二进制文件的读写又该怎么进行编码呢?二进制文件的读写二进制文件保存的是数据在机器内部的映像,将数据在机器内部的映像原式原样的写入文件可以用fwrite函数;将文件中的二进制比特串原式原样写入某个变量可以用函数fread。fwrite函数fwri......