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

C语言笔记】联合体

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

98920

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的值也发生了变化 四,联合体的大小 上面提到的联合体

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

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

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

45620

C语言学习系列->联合体and枚举

现在,小编将枚举和联合体笔记分享给大家。枚举和联合体与结构体一样,都是自定义类型,在学习完枚举和联合体后,C语言中自定义类型也就告一段落啦。...联合体 概述 联合体也是自定义类型,关键字为union,特点是所有成员共⽤同⼀块内存空间,因此,联合体也叫做共用体。...联合体大小的计算 • 联合的⼤⼩⾄少是最⼤成员的⼤⼩。...因此,输出结果为16 总结: 联合体大小不是最大成员的大小 优点 使用联合体可以节省一定的空间 HAUE某学院学生会需举办活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。...在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。

7310

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

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

44830

【答疑解惑】如何玩转C语言联合体赋值?

问题:C语言中的联合类型该如何赋值? 有C语言初学者朋友在群里做练习时对联合体进行赋值时发生编译错误,截图如下: 该联合体一个是int型,一个是float型的。...从截图上看到,该群友还没有真正理解联合体类型的实际意义。 什么是联合体 我们知道一个变量其实就是用一个名字来表示一个存储单元。...联合体的定义 联合体需要以union作为关键字开始,比如下面定义了一个联合体un: union { int i; char c; }ic; 以上的变量ic就是一个联合体联合体中的类型其实都是独立的...,是i的时候,就整个都是i,跟c没有任何关系;同样当这个变量表示c时就只有一个c,没有任何i出现!...比如上面这个ic联合体,由于最大的类型是i,占四字节,所以尽管在存c是只使用了一个字节的空间,但是大小仍然是四。 那么我们在回个头来看看上面图中那个问题,赋值显然就错了,不能同时给两个赋值。

1.7K40

C语言从入门到实战——联合体和枚举

联合体和枚举 前言 C语言中,联合体(union)是一种特殊的数据类型,允许存储不同类型的数据在同一块内存空间中。...联合体的大小取决于其中最大的成员的大小,共享同一块内存空间的成员可以存储不同类型的数据。 联合体的定义方式与结构体类似,使用关键字union,后跟联合体的名称。...C语言中,枚举(enum)是一种特殊的数据类型,用于定义一组具有相互关联的常量。枚举常量可以使用标识符来表示,并且可以有一个或多个枚举器(enumerator)。...,我们还可以使用联合体来解决实际生活中碰到的取几位地址的问题 #include typedef union Un { int n; struct s { char c1;...在C语言中是可以的,但是在C++是不行的C++的类型检查比较严格。

6310

C语言学习——结构体_联合体_枚举用法直通

文章目录 一、结构体嵌套 二、结构体数组 三、联合体 四、枚举 五、C语言字节对齐 案例1 案例2: 六、typedef 一、结构体嵌套 #include // 出生日期:年月日 struct...在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。...pCID[i]).BirthDate.iMonth, (pCID[i]).BirthDate.iDay, (pCID[i]).cAddress); } return 0; } 结果如下: 三、联合体...在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(union),它的定义格式为: union 共用体名 { 成员列表...... }; 共用体有时也被称为联合或者联合体; 结构体和共用体的区别在于...workday为枚举型enum workday的别名 workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday 五、C语言字节对齐

48810

C语言 | 建立链表,输出结点中的数据

例42:C语言实现一个简单链表,它由3个学生数据的结点组成,要求输出结点中的数据。 解题思路:读者在学习这道例题的时候,应该首先分析三个问题。 各个结点是怎么样构成链表的?...int num; //学号    float score;//成绩    struct student *next; }; int main()//主函数  {   struct student a,b,c;...=10107;//学号赋值    c.score=85.0;//成绩赋值    head=&a;//将第1个结点的起始地址赋给头指针head   a.next=&b;//将第2个结点的起始地址赋给第1个结点的...next成员   b.next=&c;//将第3个结点的起始地址赋给第2个结点的next成员    c.next=NULL;//第3个结点的next成员赋给null   point=head;   do...C语言 | 建立链表,输出结点中的数据 更多案例可以go公众号:C语言入门到精通

1.2K2418

打造坚实的基础:C语言的结构体、联合体和枚举

在编程中,特别是在像CC++这样的语言中,结构体(struct)是一种用于创建复合数据类型的工具。结构体允许你将多个不同类型的数据项组合成一个单一的实体。...c语言中提供了很多的基本数据类型,当想存储一个复杂的信息,比如一个人的基本信息,那么,结构体就可以对这些信息进行封装 结构体的声明,需要用到struct关键词 struct Stu { int...之后,我们可以直接使用 Point 来声明这种类型的变量: Point p1, p2; 结构体的自引用 在C语言中,结构体的自引用是指一个结构体内部包含指向同类型结构体的指针。...Un{ char c; int i; }; union Un un = {0}; 联合体大小的计算 联合体的大小是由其最大成员决定的,但是还要考虑内存对齐要求。...当计算联合体的大小时,如果需要考虑最严格的对齐要求,就必须要考虑成员类型在目标平台上的具体对齐规则。在不同的系统或不同的编译器设置中,同一个联合体的大小可能有所不同。 联合体的一个练习!

8110

C语言】自定义类型(结构体、位段、枚举、联合体

唯一不同的是,结构体是通过我们自己去定义的,而int这些类型是我们c语言内置的类型 1.1.3特殊结构体的声明(匿名结构体) struct { int a; char b; float c; }x...pragma就是一个预处理指令,在预编译的时候操作系统会识别它 1.8百度笔试题(没有学到宏的小伙伴,可略过此条内容) 问题:写一个宏,计算结构体中某变量相对于首地址的偏移量,并给出说明 下面我们使用C语言库里面的宏...形参压栈的时候,对栈区空间的消耗是比较大的,造成不必要的内存浪费,所以我们更提倡使用传址调用 二、结构体类型中的位段 解释完结构体,我们就不可避免的要讲讲结构体实现位段的能力 2.1什么是位段 位段,C语言允许在一个结构体中以位为单位来指定其成员所占的内存长度...(char是舍弃,int是利用) 三、枚举类型(C语言中的基本数据类型) 3.1枚举类型的定义 enum Color//颜色 { RED, GREEN, BLUE }; 上面代码的enum Color...); printf("%p\n", &(u.i));//三个地址是相同的 return 0; } 由运行结果可以看出,联合体类型创建的变量,变量所包含的成员的地址都是相同的,而且联合体类型的大小

44830
领券