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

c语言共用union、枚举、大小模式

一、共用union: 1、什么是共用union?...the c is 0x61feac the b is 0x61feac 说明: 通过上面的代码示例,读者可以发现这个共用大小,并不是像我们之前结构那样是把每个成员所占内存大小加起来...a和b都是60,它是访问内存占用大小最大的那个成员的数值,因为那个'B'的acii码值是是66;通过示例,我们也发现共用访问其成员方式跟结构是一样的(上面也有说到过)。...3、代码实战来判断大小模式: #include // 共用中很重要的一点:a和b都是从u1的低地址开始的。...(2)移位: 结论:移位的方式也不能测试机器大小。 理论分析:原因和&运算符不能测试一样,因为C语言对运算符的级别是高于二进制层次的。

1.4K20

c语言共用union、枚举、大小模式

一、共用union: 1、什么是共用union?...the c is 0x61feac the b is 0x61feac 说明: 通过上面的代码示例,读者可以发现这个共用大小,并不是像我们之前结构那样是把每个成员所占内存大小加起来...a和b都是60,它是访问内存占用大小最大的那个成员的数值,因为那个'B'的acii码值是是66;通过示例,我们也发现共用访问其成员方式跟结构是一样的(上面也有说到过)。...3、代码实战来判断大小模式: #include // 共用中很重要的一点:a和b都是从u1的低地址开始的。...(2)移位: 结论:移位的方式也不能测试机器大小。 理论分析:原因和&运算符不能测试一样,因为C语言对运算符的级别是高于二进制层次的。

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

C语言-枚举、共用

共用 前面章节学习了结构,结构里可以按顺序存放相同或者不同的数据类型,每个成员都有它对应的存储空间。...而共用和结构一样也可以按顺序存放相同或者不同数据类型,但是与结构的区别是,共用所有成员共用一个存储空间,存储空间由成员中存储空间最大的来决定。...共用定义示例: union app { int a; int b; char c; }; **共用:**也称为联合体,采用内存覆盖技术,每个成员共用一个内存空间,开空间是以最大的成员开空间...匿名方式定义,只能在定义共用的时候就定义变量 union { int a; int b; char c; }a1,a2,a3; //定义3个变量 union app2 {...枚举 C语言的枚举可以给一串有序的数字集合定义名字,特别是数量较多的整数需要定义名字时,比#define更加方便。

78120

C语言 | 共用概述

什么是C语言共用类型 一般形式 union 共用名 {   成员表列 }变量表列; 结构变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。...而共用变量所占的内存长度等于最长的成员的长度。 C语言引用共用变量的方式 只有先定义了共用变量才能引用它,但应注意,不能引用共用变量,而只能引用共用变量中的成员。...C语言共用类型数据的特点 同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一个成员,而不是同时存放几个。 可以对共用变量初始化,但初始化表中只能有一个常量。...不能对共用变量名赋值,也不能企图引用变量名来得到一个值。 C语言规定不能把共用变量作函数参数,但可以使用指向共用变量的指针作函数参数。...100道C语言源码案例请去公众号:C语言入门到精通

90100

C语言 | 共用概述

在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...什么是C语言共用类型 一般形式 union 共用名 { 成员表列 }变量表列; 结构变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。...而共用变量所占的内存长度等于最长的成员的长度。 C语言引用共用变量的方式 只有先定义了共用变量才能引用它,但应注意,不能引用共用变量,而只能引用共用变量中的成员。...C语言共用类型数据的特点 同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一个成员,而不是同时存放几个。 可以对共用变量初始化,但初始化表中只能有一个常量。...不能对共用变量名赋值,也不能企图引用变量名来得到一个值。 C语言规定不能把共用变量作函数参数,但可以使用指向共用变量的指针作函数参数。

69130

结构共用C语言

1、结构共用的定义 结构关键字为struct,共用关键字为union /*** 定义一个person的结构,要';'结束*/struct person{ char name[20...//年龄 float height; //身高 float weight; //体重 }; /*** 定义一个people共用...*/union people{ char name[20]; int age;}; 2、结构共用的声明 结构共用的三种声明是一致的: void mian(){ //结构的声明...person p){ printf("姓名:%s\n", name); printf("年龄:%d", age);} 7、结构共用的区别 结构在创建时,按照结构成员变量占的内存分配...而共用则按照共用中,所占内存最大的变量分配内存。所以,共用变量只能单个使用,而结构可以所有变量一起使用。

1.8K40

9.5 C语言共用类型

01什么是共用类型 1、一般形式 union 共用名 { 成员表列 }变量表列; 2、结构变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。...而共用变量所占的内存长度等于最长的成员的长度。 02 引用共用变量的方式 1、只有先定义了共用变量才能引用它,但应注意,不能引用共用变量,而只能引用共用变量中的成员。...3、共用变量中起作用的成员是最后一次被赋值的成员,在对共用变量中的一个成员赋值后,原有变量存储单元中的值就取代。 4、共用变量的地址和它的各成员的地址都是同一地址。...5、不能对共用变量名赋值,也不能企图引用变量名来得到一个值。 6、以前的C规定不能把共用变量作函数参数,但可以使用指向共用变量的指针作函数参数。...7、共用类型可以出现在结构类型定义中,也可以定义共用数组。 C语言 | 冒泡排序比较大小 更多案例可以go公众号:C语言入门到精通

7232725

C语言知识总结——宏,枚举,结构共用

这也是一个大小模式的问题 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。...大小: 如:int 11 22 33 44 在存储的时候 大端:11 22 33 44 0 1 2 3 低地址----> 高地址 小:44 33 22 11 0 1 2...3 低地址----> 高地址 大小的差异在于存放顺序不同 常见的操作系统是小,通讯协议是大端。...这种几个不同的变量共同占用一段内存的结构,在C语言中 以关键字union声明的一种数据结构,这种被称作“共用”类型结构,也叫联合体。 “联合”与“结构”有一些相似之处。但两者有本质上的不同。...共用的访问:共用访问成员的值时一般使用.运算符,指针时用->运算符(和结构是一样的) typedef union _node { int a; double b; char c; union

2.2K40

C语言共用与枚举类型-学习三十

共用变量分配空间的大小是以所有成员中占用空间字节数最多的成员为标准。 共用类型的声明及变量的定义 共用类型的声明与结构的声明完全相同,只是关键字为union。...数据类型 成员名n; }; 例如: union data { int i; char c; float f; }; 共用变量的定义方式与结构变量的定义方式相似..., d2; 3.直接定义共用类型的变量,不给出共用名 union { int i; char c; float f;....c 或 pd ->c、d1.f 或 pd ->f 同类型的共用变量之间可以互相赋值。...("sd.i: %d,sd.c: %c,sd.f: %f\n", sd.i, sd.c, sd.f); } image.png 从上面的运行结果可看出 对共用变量成员的赋值,保存的是最后的赋值前面对其他成员的赋值均被覆盖

47910

9.9 C++共用

C++共用概述 在C++中,会需要使几种不同类型的变量存放到同一段内存单元中,比如,将一个整型变量、一个字符型变量、一个双精度型变量放在同一个地址开始的内存单元中,这3个变量在内存中占的字节数不同,但都从同一地址开始存放...声明共用类型的一般形式为  union 共用类型名 {成员表列 }; 定义共用变量的一般形式为  共用类型名 共用变量名; C++允许在声明共用类型的同时定义共用变量,也可没有共用类型名而直接定义共用变量...C++共用变量的访问 C++不能引用共用变量,而只能引用共用变量中的成员。...C++共用类型的特点 共用变量的地址和它的各成员的地址都是同 一地址。 不能对共用变量名赋值。 不能企图引用变量 名来得到一个值。 不能在定义共用变量时对它初始化。...不能用共用变量名作为函数参数。  C++能够访问的是共用变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用。  9.9 C++共用 更多案例可以go公众号:C语言入门到精通

50888

C语言入门系列之10.结构共用

——链表 1.动态存储分配 我们知道,C语言中不允许动态数组类型,数组的长度是预先定义好的,在整个程序中固定不变。..., b, c; 或者: union data{ int i; char ch; flaot f; }; union data a, b, c; 共用和结构的比较: 结构变量所占内存长度是各成员占的内存长度之和...例如,前面定义的共用变量a、b、c各占4个字节(因为一个实/整型变量占4个字节),而不是各占4+1+4=9个字节。...例如,前面定义了a、b、c共用变量: a.i // 引用共用变量中的整型变量i a.ch // 引用共用变量中的字符变量ch a.f // 引用共用变量中的实型变量f 3.共用类型数据的特点...为此,C语言提供了枚举类型。

1K20

江哥带你玩转C语言 | 14 - 结构-枚举-共用

显然这组数据不能用数组来存放, 为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构”。...---- 定义结构类型 在使用结构之前必须先定义结构类型, 因为C语言不知道你的结构中需要存储哪些类型数据, 我们必须通过定义结构类型来告诉C语言, 我们的结构中需要存储哪些类型的数据 格式...和结构不同的是, 结构的每个成员都是占用一块独立的存储空间, 而共用所有的成员都占用同一块存储空间 和结构一样, 共用在使用之前必须先定义共用类型, 再定义共用变量 定义共用类型格式:...C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。...Autumn, Winter } s; s = Spring; // 等价于 s = 0; s = 3; // 等价于 s = winter; printf("%d", s); 枚举使用的注意 C语言编译器会将枚举元素

71600

一万六千字详解C语言struct 结构与 union 共用

在实际应用中,C语言结构数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。结构可以存储不同的数据类型,将他们互相联系起来。...这也是一个大小模式的问题 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。...2 3 低地址----> 高地址 大小的差异在于存放顺序不同 常见的操作系统是小,通讯协议是大端。...(联合体) 在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。...这种几个不同的变量共同占用一段内存的结构,在C语言中 以关键字union声明的一种数据结构,这种被称作“共用”类型结构,也叫联合体。 “联合”与“结构”有一些相似之处。

1.4K20

c语言struct结构大小计算

直入主题,要判断一个结构所占的空间大小,大体来说分三步走: 1.先确定实际对齐单位,其由以下三个因素决定     1> CPU周期     WIN  vs  qt  默认8字节对齐     Linux...    上面三者取最小的,就是实际对齐单位(这里的“实际对齐单位”是我为了方便区分随便取的概念) 2.除结构的第一个成员外,其他所有的成员的地址相对于结构地址(即它首个成员的地址)的偏移量必须为实际对齐单位或自身大小的整数倍...(取两者中小的那个) 3.结构的整体大小必须为实际对齐单位的整数倍。...char a放在结构的起始地址; short b占2个字节,2小于实际对齐字节8,故b的起始地址相对于a的起始地址的偏移量须为2的整数倍个字节; int c占4个字节,4小于实际对齐字节8,故c 起始地址相对于...+2(b)+4(c)+8(d)+13(arr)+5(浪费空间)=32字节 另外结构嵌套结构的字节对齐和上面原理一样,唯一要注意的是子结构的起始地址与母结构的起地址之间的距离必须是子结构最大成员或者实际对齐单位

1.3K41

C语言】结构大小是如何计算的?(结构对齐)

一.使用sizeof计算结构大小 通常情况下,我们习惯于使用sizeof运算符来计算结构大小。...sizeof中来计算该结构类型的大小: 可以看到,这个结构大小是32个字节。...这两个结构成员都是两个字符一个整形啊? 通过以上测试,我们很容易发现,首先结构大小不是简单的每个成员大小逐个累加。其次,结构大小似乎和结构成员的顺序也有关系。...那么结构大小到底是如何计算的呢?下面我们一起探究一下。 二.影响结构大小的因素 1.结构成员的类型 首先的影响因素就是结构成员的类型,不同的结构成员占用的内存大小不同。...而C语言中常见的变量类型及其所占空间字节数如下表: C语言常见的数据类型及其所占空间 类型名所占大小(单位:字节)char1short2 int 4long4/8(取决于系统)float4double8long

7410
领券