首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一路题目 求解释

2012-10-20 
一道题目 求解释C/C++ codeunion{int ichar x[2]}aint main(int argc, char* argv[]){a.x[0] 10a.x[

一道题目 求解释

C/C++ code
union{    int i;    char x[2];}a;int main(int argc, char* argv[]){    a.x[0] = 10;    a.x[1] = 1;    cout<<a.i<<endl;    return 0;}


为什么最后输出的是266?a.i为什么是266?跟踪了一下 的确是266 但是不知道为什么

[解决办法]
两道题类似。

http://topic.csdn.net/u/20121010/22/11f4bc7f-ce17-47ad-9103-78f708fd8405.html
[解决办法]
他们公用同一块内存。

于是内存这样分配的。

0A

01

00

00

由于是little-endian下,这样读取,

0000010A = 266
[解决办法]
共用体中的所有成员共享一段公共的存储区,所以共用体所占内存字节数与其成员中字节数最多的那个成员相等,因此变量中的所有成员的首地址相同。
union
{
int i;//4个字节
char x[2];//2个字节
}a;
所以共用体a占用4个字节。

热点排行
Bad Request.