C语言,关于共同体和结构体,程序我能看懂,但是结果为什么是这样啊?
我认为u.x=19,u.c='Z',u.s.a=9,u.s.b=10;但是答案是u.x=100,u.c='d',u.s.a=100,u.s.b=100#include"s...
我认为u.x=19,u.c='Z',u.s.a=9,u.s.b=10;但是答案是u.x=100,u.c='d',u.s.a=100,u.s.b=100
#include "stdio.h"
main(){
union{int x;
char c;
struct{int a;int b;}s;
}u;
u.s.a=9;
u.s.b=10;
u.c=u.s.a*u.s.b;
u.x=u.s.a+u.s.b;
printf("u.x=%d u.c=%c\t",u.x,u.c);
printf("u.s.a=%d u.s.b=%d",u.s.a,u.s.b); 展开
#include "stdio.h"
main(){
union{int x;
char c;
struct{int a;int b;}s;
}u;
u.s.a=9;
u.s.b=10;
u.c=u.s.a*u.s.b;
u.x=u.s.a+u.s.b;
printf("u.x=%d u.c=%c\t",u.x,u.c);
printf("u.s.a=%d u.s.b=%d",u.s.a,u.s.b); 展开
展开全部
共同体变量u大小为四个字节
00000000 00000000 00000000 00000000
u.s.a=9;u.s.b=10;/*这时成员s用效,s中的a和b分别占2个字节*/
所以:
00000000 00001010 00000000 00001001
u.c=u.s.a*u.s.b;/*这时成员c有效,c只占一个字节,最低位的一个字节*/
所以:
00000000 00001010 00000000 01011010
u.x=u.s.a+u.s.b;/*这时成员x有效,x占两个字节,最低位两个字节*/
所以最终四个字节:
00000000 00001010 00000000 01100100
结果应该是:u.x=100,u.c=d u.s.a=100,u.s.b=10
不知道有没有说清楚啊。。。
00000000 00000000 00000000 00000000
u.s.a=9;u.s.b=10;/*这时成员s用效,s中的a和b分别占2个字节*/
所以:
00000000 00001010 00000000 00001001
u.c=u.s.a*u.s.b;/*这时成员c有效,c只占一个字节,最低位的一个字节*/
所以:
00000000 00001010 00000000 01011010
u.x=u.s.a+u.s.b;/*这时成员x有效,x占两个字节,最低位两个字节*/
所以最终四个字节:
00000000 00001010 00000000 01100100
结果应该是:u.x=100,u.c=d u.s.a=100,u.s.b=10
不知道有没有说清楚啊。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询