联合体了解
来源:互联网 发布:华为程序员工资多少 编辑:程序博客网 时间:2024/06/04 20:11
时间久了,慢慢很多编程的一些基础知识,慢慢的都有些遗忘,有时间,还是要温习一下~
1.概述
联合体union的定义方式与结构体一样,但是二者有根本区别。
在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。
2.联合体长度
在The C Programming Language里面讲述union内存分配的原话是
1)联合体就是一个结构
2)联合体的所有成员相对于基地址的偏移量为0
3)此结构空间要大到总够容纳最“宽”的成员
4)并且,其对其方式要适合于联合体中所有类型的成员
我的理解可以概括为两点:
1)联合体的结构空间要足够大,要等于最长的一个结构变量的空间,但是这个最长的空间要满足以下条件:
1.要大于等于最长的一个结构变量的空间
2.并且要能够整除其他结构变量的数据长度,即联合体空间对其他成员的元类型要能够整除(int a[5],其元类型为int,元类型长度为4),实际上就是要取一个元类型的最小公倍数。
这儿举例来说
这个结构体中,各个结构变量的空间分别为float fuel_load; 占4个字节,char a[5];占5个字节,int pallets;占4个字节。通过“3)此结构空间要大到总够容纳最“宽”的成员”这句话,我们可以认为是结构体的空间为5个字节即可,但是“其对其方式要适合于联合体中所有类型的成员”没有满足,对于这个问题,通过上面红色字体部分可以解决。,因此联合体空间为8.8可以整除 4(float、int长度)和1(char的长度),并且8大于数组5.再举一个例子有助于大家理解。
sizeof(fighter) 是12 。int wingspan; int passengers;两个int型 8个字节。union中 3个都是4个字节,因此union长度为4个字节。
3.内存分配
一句话:联合体变量的各个成员都是从低字节开始公用的。即:所有的成员都是从低字节开始的。
我们先为整个union分配一个空间,这个空间大小就是上面(2)内存分配中所讲述的。
其内存如下图所示。a.x[0] 处于低字节,x[1]高字节。当调用i这个成员变量的时候,其开始地址仍然是从起始地址开始,数4个字节输出。因此为 256 + 10 = 266程序附上:
联合体union的定义方式与结构体一样,但是二者有根本区别。
在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。
2.联合体长度
在The C Programming Language里面讲述union内存分配的原话是
1)联合体就是一个结构
2)联合体的所有成员相对于基地址的偏移量为0
3)此结构空间要大到总够容纳最“宽”的成员
4)并且,其对其方式要适合于联合体中所有类型的成员
我的理解可以概括为两点:
1)联合体的结构空间要足够大,要等于最长的一个结构变量的空间,但是这个最长的空间要满足以下条件:
1.要大于等于最长的一个结构变量的空间
2.并且要能够整除其他结构变量的数据长度,即联合体空间对其他成员的元类型要能够整除(int a[5],其元类型为int,元类型长度为4),实际上就是要取一个元类型的最小公倍数。
这儿举例来说
这个结构体中,各个结构变量的空间分别为float fuel_load; 占4个字节,char a[5];占5个字节,int pallets;占4个字节。通过“3)此结构空间要大到总够容纳最“宽”的成员”这句话,我们可以认为是结构体的空间为5个字节即可,但是“其对其方式要适合于联合体中所有类型的成员”没有满足,对于这个问题,通过上面红色字体部分可以解决。,因此联合体空间为8.8可以整除 4(float、int长度)和1(char的长度),并且8大于数组5.再举一个例子有助于大家理解。
sizeof(fighter) 是12 。int wingspan; int passengers;两个int型 8个字节。union中 3个都是4个字节,因此union长度为4个字节。
3.内存分配
一句话:联合体变量的各个成员都是从低字节开始公用的。即:所有的成员都是从低字节开始的。
我们先为整个union分配一个空间,这个空间大小就是上面(2)内存分配中所讲述的。
其内存如下图所示。a.x[0] 处于低字节,x[1]高字节。当调用i这个成员变量的时候,其开始地址仍然是从起始地址开始,数4个字节输出。因此为 256 + 10 = 266程序附上:
- 联合体了解
- 联合体
- 联合体。。。
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体
- 联合体分析
- 联合体union
- 联合体union
- 联合体问题
- union联合体
- 联合体union
- HDU 6053(莫比乌斯反演+快速幂)
- 免费空间(免备案,无广告) 1G免费全能空间
- 有关多态的那点事丶
- angular.js 指令集实现模态框拖动(3)
- 线程死锁检测方法
- 联合体了解
- lintcode -- 最长公共子串
- SSIS项目基础实战操作手册_v1.0(傻瓜版)(三)
- java实现动态规划求解给定矩阵的和最大的子数组(矩阵中数字正负均存在)
- 日期转毫秒数
- 虚拟化VMware vsphere
- Notepad++ 使用二进制或16进制模式查看文件
- 2017 Multi-University Training Contest
- Mac下MAMP Pro 启动数据库MySQL出错导致无法启动的问题