问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中,结果为什么是0呢。我以为是4呢,我看不出来。。谢谢,帮解决一下...

发布网友 发布时间:2024-09-25 20:19

我来回答

5个回答

热心网友 时间:2024-10-04 15:33

#include <stdio.h>

int main(void)

{

 union myun{

  struct{int x,y,z;}u;

  int k;

 }a;

 a.u.x=4;

 a.u.y=5;

    a.u.z=6;

 a.k=0;

 printf("%d\n",sizeof(a));

 printf("%d\n",a.u.x);

 printf("address x=%p\n",&a.u.x);

 printf("address y=%p\n",&a.u.y);

 printf("address z=%p\n",&a.u.z);

 printf("address k=%p\n",&a.k);

 return 0;

}

可见,x,y,z,k每个占4字节,x和k,共用同一个地址,这是union的特性

热心网友 时间:2024-10-04 15:33

因为a.k和a.u.x在内存中占用相同的地址空间
你要不看看a.u.y和a.u.z是什么,联合体在内存中占用的空间是以union中需要内存最大的变量为准的,你的程序中a需要3个int的空间(一个结构体),所以你看a.k的话,因为a.k是最后写进去的,而且和a.u.x一样是int型,并且在内存中占用相同的地址空间,所以读出来数据是相同的

热心网友 时间:2024-10-04 15:34

这里结构体四字节对齐,第一个元素,就是x和k是同一个内存空间。所以改了k就相当于改了x。
int *p=(int *)&a+1;
*p=0;
这样就修改了y的值
同理
int *p=(int *)&a+1;
*p=0;
这样就修改了z的值
内存布局你就明白了

热心网友 时间:2024-10-04 15:28

http://visionsky.blog.51cto.com/733317/151760,这个可以帮助你

“联合”与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和(空结构除外,同时不考虑边界调整)。而在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。
下面举一个例了来加对深联合的理解。
例4:
#include <stdio.h>
void main()
{
union number
{ /*定义一个联合*/
int i;
struct
{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}num;
num.i=0x4241; /*联合成员赋值*/
printf("%c%c\n", num.half.first, num.half.second);
num.half.first='a'; /*联合中结构成员赋值*/
num.half.second='b';
printf("%x\n", num.i);
getchar();
}
输出结果为:
AB
6261
从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值; 当给first和second赋字符后, 这两个字符的ASCII码也将作为i 的低八位和高八位。

热心网友 时间:2024-10-04 15:29

union体是看最后一次存进去的数据,与里面具体的那个变量无关的。
变量a的最后一次赋值是0,所以结果也是0。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胜达这款车百公里油耗多少? 胜达节能油加盟办厂可靠吗是不是骗子 河南洛阳胜达就是骗子,我把钱交了也不来人了,他们一个老总说了爱咋办... 胜达油是个骗局吗 胜达节能油是什么? 叩解度关于叩解的论述 湿重跟湿重有关的打浆磨片 戴尔XPS M1330-950重要参数 如果到别的单位去面试的话 如果人家问起为什么会选择这家公司而离开另外... 学生会被两个部门同时面试怎么办 !a&gt;b||c&gt;b c语言这个为什么等于0 C语言,表达式(a=b=c=3)&amp;&amp;a==b==c的值为什么是0,求大佬解答,谢谢。 c语言问题,为什么循环不起来,c一直是0? 右脚脚踝扭伤 肿了好大一个包 急!! 脚扭伤一个多月了,还没完全消肿,到底是怎么回事啊?现在走路基本能走... 我的脚踝外侧大骨头处扭伤八天了,还没有完全消肿,而且脚面也有些瘀... 转让和让与有什么区别 ...现在都过了半个月了还没消肿,正常走路不痛,就是按到会有轻微的疼痛... 我现在新疆省精河县公安局辅警一年多了,大专毕业证两年后出来,我现在... 25厘米等于多少分米多少厘米 辅警试用期没在宿舍睡被开除 还能从考辅警吗?我们教官说三年后能考... ...期未满擅自离职的 我现在是派出所辅警,是不是不能报名高? 55寸液晶拼接高3.4米,宽1.2米显示设备播放什么比例像素的视频合适? 贷10万中介抽2万合法吗 我贷了10万中介收1万贵吗 关于邮票的词语 前台主要做什么 电动门钥匙丢了怎么配新的 锁匠app注册不了 紫苏能治什么病 为什么Dev-C++编译C语言计算出来的结果是0 有50个西瓜,一框装8个,6个框够吗?需要多少个框才能够装完 李爷爷家今天摘了580个西瓜+,每筐装8个,需要多少个框才能全部装下? 西瓜共运来73个,每筐只能装8个,至少要多少个筐? 西瓜丰收了。八筐装了40八筐装了48个西瓜,照这样计算,丰园农场,今天收... 中机十院国际工程有限公司洛阳分公司怎么样? 有47个西瓜每6个西瓜装在一个筐里最少要多少装完? 第一个筐里有8个西瓜,从第二个筐里拿4个西瓜放在第一个筐里相差多少个... 怎么看出一个男生是不是真心喜欢你 如何看出一个男生对你有没有意思呢? 常用制冷剂性质:R-22 怎样看出一个男生喜不喜欢你怎么看出对方喜欢我 怎么从细节看出一个男生是否喜欢你 洋马94发动机油耗多少 哈工大威海自习室 ...和哈尔滨工业大学,寒假期间有向外开放的自习室吗?需要什么证件吗... 2024过去了迎接2025的句子(200句) 这学期(寒假过后)哈工大(威海校区)自习室什么时间开放 具体那些楼是... 哈工大威海分校自习室端午节三天假期,开放么。 我的呱呱也是总播放失败,可是我还不知道什么原因,知道的话麻烦...