求联合体中整型变量的值
来源:互联网 发布:闲鱼上推淘宝客链接 编辑:程序博客网 时间:2024/06/06 20:40
union A
{
int i;
char b[2];
};
A a;
a.b[0] = 10 ;
a.b[1] = 1;
求 cout<<a.i 的输出
这道题目的考察点是联合体中成员的内存存储方式。
首先清楚要清楚一个概念,联合体中的变量是公用一块内存,大小取决于这个联合体中占用空间最大的变量类型的整数倍。A里面int i 占用4字节,char b[2] 占用2个字节,那么A的内存空间长度为4字节(如果是char b[5],那么A的内存空间长度为8字节)
那现在已经清楚了对象a的内存大小为4字节,那么经过 a.b[0] = 10;a.b[1] = 1;这两步操作后,a的内存空间的前2个字节,即前16位的样子大致应该为0000 0001 0000 1010 (默认小端模式) ,也就是说i的前2个字节的值等于十进制的266。如果把题目中的i的类型改为short,那么这道题目的答案就是266。
可是由于int占4位,那么i的后16位值是什么呢?这就由a的类型决定,如果a是全局或者静态变量,那么a的内存空间会被默认初始化为0,也就是i的二进制值为 0000 0000 0000 0000 0000 0001 0000 1010 ,那么最终的输出还是十进制266,但如果a是一个局部非静态变量,那么他的成员变量将不会被初始化,是随机的垃圾数据,比如0xcd,0xcc之类的,这样一来,虽然i的前2个字节的值我们已经知道了,但由于后2个字节的值是随机数据,我们没有办法知道最后a.i的值是多少,在我本人的机器上的结果就是个负数。
- 求联合体中整型变量的值
- 求两个整型变量的最大公约数
- 编程中移位运算解决的问题(如何求整型变量中1的个数)
- 求一个整型变量二进制数中含有1的数目(经典)
- 输入一个整型变量,求它二进制位中含有1的个数
- 输出整型变量的十进制字符值
- 交换两个整型变量的值
- 交换两个整型变量的值
- 交换两个整型变量的值
- 交换两个整型变量的值
- 求整型数组中只出现1次的数字
- 求一个整型数字中有没有相同的部分
- 求整型 数组中最大值和最小值元素的距离
- 不用中间变量交换两个整型变量的值
- 获取32位整型变量中某一位的bit值
- C#中字符串转化为整型变量的一般方法
- C语言中整型变量的互换方法总结
- C++中整型变量的存储大小和范围
- 【gnboy007】虚拟机VirtualBox安装CentOS系统
- Eclipse开发Android应用程序入门
- Eclipse开发Android应用程序入门:重装上阵
- SendMessage function 浅析
- jdk与jre的区别
- 求联合体中整型变量的值
- codeforces 162 div 1(完全)
- android cts 目录
- Skill Set Of IT Project Manager (IT项目管理者应具备的能力)
- Flex4自定义右键菜单
- Linux 汇编语言开发指南
- js 验证工具类
- C# 学习笔记 数据库 断开连接层 (书:C#与.NET4 第22章)
- matalb中plot函数补充用法