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

C语言笔记】联合体

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

1.1K20

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

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

    C语言联合体(union)

    1.联合体的含义 联合体也叫做共用体,是指联合体的所有成员共用同一块内存空间。这也就说明了,联合体的大小至少是其成员所占空间的最大值。 2....联合体的声明 #include //声明了一个联合体 union Un { char c; int i; }; int main() { //联合变量的定义 union Un...联合体大小的计算 联合体的大小至少是最大成员的大小。 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。 4....联合体的特点 联合体的成员时共用同一块内存空间的,这样一个联合体变量的大小,至少得是最大成员的大小(因为联合体至少得有能力保存最大的那个成员)。 如何证明这一点呢?

    9210

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

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

    48620

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

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

    10410

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

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

    46930

    C语言:深入了解(联合体和枚举)

    联合体 联合体的类型的声明 像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。...所 以联合体也叫:共⽤体。 给联合体其中⼀个成员赋值,其他成员的值也跟着变化。 联合体输出的结果为什么是4呢?...联合体的特点 联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合 ⾄少得有能⼒保存最⼤的那个成员)。...联合体是共⽤同⼀块内存空间的所以不能同时使用联合体,不能同时使用 我们可以看到3个地址都是一样的。...struct bp//结构体 { char a; int b; }; union ar//联合体 { char a; int b; }; 联合体大小的计算 联合的⼤⼩⾄少是最⼤成员的⼤⼩。

    8110

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

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

    1.8K40

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

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

    17510

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

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

    15510

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

    如果还没有学习结构体,可以参考文章:【C语言】自定义类型:结构体 2.联合体的特点    联合的成员是共用同⼀块内存空间的,这样⼀个联合变量的大小,至少是最⼤成员的大小(因为联合体至少得有能力保存最大的那个成员...这是初始化完i时,结构体内存的存储:    可以看到,这里VS用小端字节序的方式将i存放到了内存中,如果不知道什么是小端字节序,可以参考该文章:【C语言】数据在内存中的存储(万字解析)   ...:    所以在这个联合体中,我们可以分析得到:整型变量i和字符变量c占据同一块空间,而c占据的就是i的第一个字节,当我们对c进行修改时,也就是对i第一个字节的修改,所以当我们把c修改为0x55...,大小是5个字节,所以根据第一条规则,这个联合体的大小至少是5个字节    然后就是第二条规则,这条规则需要查看这个联合体中的最大对齐数,联合体的大小必须是最大对齐数的倍数,而联合体成员c的对齐数为1...   其实很简单,上面案例的本质就是利用指针来访问整型a的第一个字节,而我们的联合体本身就可以做到这一点    只要在联合体中创建一个整型成员a,创建一个字符型成员c,由于共用空间,那么c就可以直接访问

    6610

    杂谈c语言——4.结构体和联合体

    两者最大的区别在于内存利用 1.struct && union 一、结构体struct     成员各自拥有自己的内存,各自使用互不干涉,同时存在的,遵循内存对齐原则。...二、联合体union     成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该内存的读写),变量共用一个内存首地址。因而,联合体比结构体更节约内存。...char a; //a表示联合体成员名 int b; short c; }U2; //U2表示联合体变量名 //访问该联合体内部成员时可以采用U2.a=1;其中"点"表示联合体成员运算符...001AF85C 001AF85C  //代码2 #include //联合类型的声明 union Un { char c; int i; }; int main() { /...#include //联合体 union u2 { char a; int b; short c; double d; int e

    7510

    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语言字节对齐

    56510

    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.3K2418
    领券