首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C语言】联合和枚举

一、联合体 1、联合体类型的声明 联合体的定义与结构体相似,但是联合体往往会节省更多的空间,它的特点是所有成员共用一块内存空间,结构体也叫共用体 联合体中给某一成员赋值,其他成员值往往会跟着变化 #include...就是因为前边提到的:联合体的成员共用一块内存空间 2、联合体成员的特点 联合变量的大小至少是最大成员变量的大小 #include union Un { char c; int i...11223355 第二行联合体地址,联合体成员地址都是一个地址 所以我们验证了联合体成员变量共用一块内存 3、与结构体对比 struct Un { char c; int i; }; union...Un { char c; int i; }; 结构体内存中,灰色的是浪费掉的内存 4、计算联合体大小 联合体的大小至少是最大成员的大小 当最大成员大小不是最大对齐数的整数倍时,要对齐到最大对齐数的整数倍...Sat, Sun }; enum Day today = Mon; 使用枚举常量为枚举变量赋值,在C语言中可以用整数来给枚举变量赋值,但在C++中不可以 今日分享就到这里了

7210

C语言详解(联合和枚举)

//结构体 struct S { int n; char c; }; //联合体 union U { int n; char c; }; 但是与结构体不同的是编译器只为联合体最大的成员分配足够的内存空间...2、联合体的特点 #include struct S { int n;//4 8 4 char c;//1 8 1 //8个字节 }; union U { int...联合体的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小,因为联合至少得有能力保存最大的那个成员 union U { int n; char c; }; int main(...3、相同成员的结构体和联合体对比 来看相同成员的结构体和联合体内存分布情况 //结构体 struct S { int n; char c; }; //联合体 union U { int n; char...c; }; 在VS上我们也可以证明这件事 4、联合体大小的计算 联合体的大小是不是就是最大成员的大小呢?

15210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言——联合体类型

    (即:给联合体其中的一个成员赋值,其他成员的值也会跟着被改变) 二,联合体的声明 1,联合体类型的声明 C语言中联合体类型的定义形式: union 联合体名 { 成员项表列 }; 例如:...(我们定义一个同时由char和int型构成的联合体) union Un { char c; int i; }; (注意:分号不能丢) 2,联合体变量的创建 同结构体变量的创建类似,我们可以在声明联合体类型的同时创建变量...2)在声明联合体类型的同时创建变量 union Un { char c; int i; }u1; 对联合体成员的引用也与对结构体成员的引用相同 三,联合体的特点 1,联合体与结构体的对比 联合体的大部分与结构体相似...下面我们就对联合体u1中的成员c进行赋值,然后再打印成员i #include union Un { char c; int i; }u1; int main() { u1.c...= 1; printf("%d", u1.i); return 0; } 运行结果: 可见:尽管没有给成员i赋值,但是随着成员c被修改成员i的值也发生了变化 四,联合体的大小 上面提到的联合体

    25610

    C语言(13)----联合和枚举

    联合体 联合体(union)是一种特殊的数据类型,可以在同一内存空间中存储不同类型的数据。...联合体和结构体(struct)类似,但不同之处在于结构体的各个成员会分别占用内存空间,而联合体的各个成员共享同一内存空间。鉴于这个特性,联合体也叫做共用体。...,那么为了有足够的空间来装下所有的成员,那么联合体大小必须要大于最大成员的大小。...c[5]; int i; }; int main() { //求下⾯输出的结果 printf("%d\n", sizeof(union Un1)); return 0; } 输出结果应该是...8; 因为int类型占四个字节,而c数组占五个字节,那么鉴于5不是最大对齐数的整数倍,所以系统就会自动默认该联合体的大小为8个字节。

    5610

    【C语言笔记】联合体

    一、什么是联合体? 在C语言中,变量的定义是分配存储空间的过程。一般的,每个变量都具有其独有的存储空间,那么可不可以在同一个内存空间中存储不同的数据类型(不是同事存储)呢?...答案是可以的,使用联合体就可以达到这样的目的。联合体也叫共用体,在C语言中定义联合体的关键字是union。...关于结构体与枚举的知识可查看往期笔记: 【C语言笔记】结构体 【C语言笔记】枚举 二、联合体变量的定义方法 创建联合和创建结构的方式相同,需要一个联合模板和联合变量。...关于typedef关键字可查看往期笔记:【C语言笔记】#define与typedef的区别? 三、初始化联合体 联合体的初始化与结构体不同,联合体只能存储一个值。...c = {20}; /* 2、初始化联合的第一个成员; */ perdata_U d = {.Office = 30}; /* 3、根据C99标准,使用指定初始化器。

    1.1K20

    【C语言】联合体(union)

    1.联合体的含义 联合体也叫做共用体,是指联合体的所有成员共用同一块内存空间。这也就说明了,联合体的大小至少是其成员所占空间的最大值。 2....联合体的声明 #include //声明了一个联合体 union Un { char c; int i; }; int main() { //联合变量的定义 union Un...相信有不少的读者会产生疑惑。 3. 联合体大小的计算 联合体的大小至少是最大成员的大小。 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。 4....联合体的特点 联合体的成员时共用同一块内存空间的,这样一个联合体变量的大小,至少得是最大成员的大小(因为联合体至少得有能力保存最大的那个成员)。 如何证明这一点呢?...证明一: 可以看到不管是联合变量还是里面的成员,它们都是从同一个地址空间出开始存放数据的。 证明二:

    12110

    C#的语言集成查询

    语言集成查询(LINQ)是 C# 3.0 引入的一项革命性特性,它将查询功能直接集成到语言中,使得数据查询变得简单、直观且类型安全。...LINQ 的基本概念LINQ 通过扩展 C# 语言,提供了一种声明式的查询语法,使得查询操作更加直观和易于理解。...表达式树:查询表达式在编译时被转换为表达式树,这是一种数据结构,表示代码中的表达式。LINQ 的核心组件查询表达式查询表达式是 LINQ 的核心,它提供了一种声明式的查询语法。...一个典型的查询表达式包括三个部分:from 子句:指定查询的数据源和范围变量。where 子句(可选):指定查询的条件。select 子句:指定查询的结果。...// 查询内存中的数据集合var londonCustomers = customers.Where(c => c.City == "London").ToList();// 查询 XML 文档XElement

    2.3K10

    用c语言编写一个学生成绩管理系统_c语言成绩查询系统编程

    C语言简单实现学生成绩管理系统 一、前言 首先,要写一个管理系统必须要先搭出一个框架来,即明确自己要实现哪些功能,将每个功能都写陈一个函数,然后再去编写实现各个功能的函数,最后再思考各个函数之间的相互调用...其次,最好是实现一个功能就测试一个,因为这样比较方便调试,出现bug的时候自己先思考,然后再去查找对应的知识点,一定要自己多思考,这样才会使自己的理解和记忆更加深刻 最后,在写管理系统的时候会出现很多...二、涉及内容及要求 C语言的选择,循环,数组,字符串,链表,文件的熟练掌握 链表的增删改查及链表排序 文件录入链表及把链表信息存入文件 三、小技巧 多文件存放信息,即将学生成绩信息,学生账号信息,教师账号信息存入不同文件中...,这样方便内容的读取 将链表内容导入文件时一行存放一个人的信息,方便读取 在进入系统时就把学生成绩信息,学生账号信息,教师账号信息从文件录入链表 修改密码时必须验证原密码,在修改完密码后立即存入文件 在系统退出时将学生成绩信息导入文件...return 0 ; } 六、总结 第一次写这么长的代码,确实挺累的,但收获也不小,但是还有还不够完善,比如密码加密未完成,还有这个系统只能管理一个班级,若要实现多个班级的成绩管理就不嗯呢该完成了

    4.9K30

    枚举以及联合体--C语言

    枚举 枚举的定义 枚举顾名思义就是一一列举。 把可能的取值一一列举。 一周的星期一到星期日是有限的7天,可以一一列举。 性别有:男、女、保密,也可以一一列举。...防止了命名污染(封装) 便于调试 使用方便,一次可以定义多个常量 联合体(共用体) 联合体的定义 联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间 (所以联合体也叫共用体...) 联合体的特点 //联合类型的声明 union Un { char c; int i; }; //联合变量的定义 union Un un; //计算联合变量的大小 printf("%d\n", sizeof...(un)); 联合体的变量是共用同一块空间的 联合体的计算 联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合体至少得有能力保存最大的那个成员)。...以上就是自定义类型中的枚举和联合体的介绍以及用法解释,自定义类型的使用是十分灵活的,需要我们好好领悟,要是文章有哪些错误,希望各位在评论区可以指正,我们一起进步!

    48920

    【C语言】联合体和枚举

    ( "%x\n" , un.i); return 0 ; } 输出结果:11223355 由图可知是将最低位由于联合体的特点,覆盖成c的55。...; } 输出结果: 001 AF85C 001 AF85C 001 AF85C 可见输出结果一样,这也就说明联合体地址和里面每个成员名的地址是一样的 1.3...,char的最大对齐数是1,int的最大对齐数为4,所以这个联合体的最大对齐数为4,联合体至少也是最大成员的空间,成员中最大的空间是char c[5],为5,5不是4的倍数,所以对齐到8的位置,就是8;...枚举类型 枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量 2.1 枚举类型的声明 枚举顾名思义就是一 一列举。 把可能的取值一 一列举。...在C语言中是可以的,但是在C++是不行的,C++的类型检查比较严格。

    9710

    C语言结构体、联合与枚举类型

    于是C语言就定义了一个不同类型数据的集合的数据结构 ————结构体。...准确来说,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。...二、联合体(共用体) 1.什么是联合体,以及如何定义联合体? 在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。...这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。...等等,其实啊枚举的应用非常的广泛,我们在用C语言写的中型大型项目里面常常会用到枚举类型,比如在写植物大战僵尸的游戏,现在要求你把植物卡槽写满,你该怎么办,难道用1代表这个植物2代表那个植物?

    11810

    深入理解 C 语言中的联合体

    引言 联合体(union)是 C 语言中的一种特殊数据结构,允许在同一内存位置存储不同类型的数据。它与结构体(struct)类似,但存在显著的差异。...理解联合体的定义、基本用法、优势、存储细节及其高级用法,有助于在实际编程中有效地使用这一数据结构。 一、 联合体的定义与基本用法 1.联合体的定义 在 C 语言中,联合体通过 union 关键字定义。...(MyStruct)); // 联合体 u.c = 'a'; printf("Union: \n字符:%c,", u.c); u.i = 20; printf("数字:%d\n", u.i);...- VS 中默认的值为 8 - Linux中 gcc 没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩ 示例: #include union Un1 { char c[5];//...总结 通过以上内容,我们深入了解了C语言中的联合体。合理使用联合体可以提高代码的灵活性和效率,但同时也需要谨慎处理可能出现的内存重叠和数据类型转换问题。

    58910

    【C语言】数组&&结构体&&枚举&联合详解

    //signed 有符号的 char是否有signed char C语言标准并没有规定,取决于编译器 浮点型家族: float double 构造类型: 构造类型也叫做自定义类型...但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节...1,就是数组越界访问了,超出了数组合法空间的访问 C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的 所以程序员写代码时,最好自己做越界的检查 int main...中没有默认对齐数,对齐数就是成员自身的大小 下面这篇文章详细的解释了结构体内存对齐规则 C语言--结构体内存对齐规则_结构体对齐原则-CSDN博客 3.4.2 为什么要对齐 大部分的参考资料都是这样解释的...{ char c; int i; }; 联合体的成员,在同一时间只能使用一个 5.2 联合的特点 联合的成员是公用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的成员

    16210

    C语言之高校学生信息快速查询系统的实现

    任务陈述与分析 问题陈述: 在高校环境中,随着学生数量的增加,传统的线性搜索方法在查找效率上显得力不从心。为了提高查询效率,需要设计一个能够快速响应不同查询条件的学生信息管理系统。...该系统需要有效管理大量学生数据,并能够根据特定的查询条件快速定位目标信息。...查询效率:系统应能够快速响应各种查询请求,包括但不限于按学号、姓名、学院、专业等条件的查询。 用户界面:提供简洁明了的用户界面,使用户能够轻松进行查询和其他操作。...可扩展性:系统设计应考虑未来可能的功能扩展,如增加新的查询条件或集成新的数据源。...数据持久化:使用文件系统存储学生信息。 性能优化:通过哈希表或平衡二叉树提高查询效率。 小结 本学生信息管理系统是一个用C语言编写的简单而实用的程序,旨在帮助用户管理学生数据。

    5100

    C语言——自定义类型:联合与枚举

    1.联合体 1.1 联合体类型的声明 1.结构体所有成员的空间都是独立的,而联合体所有成员都共用一块空间(所以也叫共同体),与结构体不同,联合体的关键字是union 2.与结构体一样,联合体也是由一个或多个成员组成...B,使用B就不使用A的时候,就可以使用联合体(共同体) //联合类型的声明 union Un { char c;//1个字节 int i;//4个字节 }; int main() {...联合体的特点 联合体的成员是共同使用一块空间,那么一个联合变量的大小至少是最大成员的大小 union Un { int i; char c; }; union Un un;...printf输出的值都相同,皆为:001AF85C union Un { int i; char c; }; union Un un; int main() { /...0x55)  1.3联合体大小的计算 联合体的大小至少是最大成员的大小,但是,当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍 union Un1 { char c[

    7110
    领券