C语言求值问题——再次困惑

#include<stdio.h>
union ss
{ int I;
char c[2];
};
void main()
{ union ss x;
x.c[0]=10;
x.c[1]=1;
printf("%d",x.i);
}

A,11 B,266 C,265 D,138

这道题有一些问题,我在VC6.0环境下运行,结果用十六进制输出是0xCCCC010A,说明题中只是将低位的两个字节赋值了,而高位的两个字节的值是不确定的.
在对x.c[0],x.c[1]赋值之前先对整块内存初始化一下就OK了,程序改为:
void main()
{
union ss
{
int i;
char c[2];
};
union ss x;
x.i = 0;//将此块内存初始化为0
x.c[0]=10;
x.c[1]=1;
printf("%x\n",x.i);

}

题目分析:因联合体中的数据共用一块内存,即int i的4个字节,c[0],c[1]分别在i的低位字节上,将c[0],c[1]赋值后就相当于将i的低位字节赋值,而i的高位2个字节被初始化成了0,故i = 0x0000010A;转换成10进制为266,选B.
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-09-19
选B

i = 0000 0001 0000 1010
c[1]=0000 0001 c[0]=0000 1010
第2个回答  2008-09-19
B对
第3个回答  2008-09-19
你就运行一下不就知道了
第4个回答  2008-09-19
在不同的编译器下应该有不同的结果!在普通的TC下整型数是占2个字节而字符型变量是占1个字节!在union中两个char型变量正好占用了int型变量的地址。而在VC编译器中int类型占4个字节!所以不同的编译器运算的结果也应该是不同的。

C语言求值问题——再次困惑
x.c[0]=10;x.c[1]=1;printf("%x\\n",x.i);} 题目分析:因联合体中的数据共用一块内存,即int i的4个字节,c[0],c[1]分别在i的低位字节上,将c[0],c[1]赋值后就相当于将i的低位字节赋值,而i的高位2个字节被初始化成了0,故i = 0x0000010A;转换成10进制为266,选B....

c语言问题
首先看(b!=c),因为b=3 c=0,所以b不等于c,所以b!=c是真的,表达式为非0,那么这个表达式的结果就是1 那么整个表达式可以写成 !a!=1 ,a=2,因为一切非0都是真,那么!a就是假的,!a的值就是0 那么现在整个表达式就是 0!=1,0当然不等于1了,也就是假不等于真,这个式子是正确...

C语言由i++和++i引起一道问题的思考,大部分人会做错
这道问题的关键在于理解变量 i 的变化顺序与值的输出结果。几乎所有 C 语言教材都解释了 i++ 和 ++i 的区别:前者先使用变量的值然后使其自增,后者则先自增后使用变量的值。但问题在于,这道题的真正挑战在于如何理解不同编译器的处理方式。通过编写简单的示例代码,我们可以清楚地观察到输出结果。

c语言,microsoft visual c ++环境下的根号求值总是有问题,贴上程序,大 ...
0.5默认是double类型,而a、b是float,所以有warning 改成 b-0.5f 就行了

关于C语言求值的问题
(x--,y++,x+y)是逗号运算结果是x+y!则r=func(x+y,z--);

C语言程序求值
下面是我运行的结果:题目解析:1、这道题目应该考察的是对static的理解。2、static 修饰的变量在程序运行开始, 到结束,只会被定义一次,而且内存是共享的。3、所以在第二次执行vist()函数是, key的值是在第一执行的基础上进行的key++。、如果以上问题对你有帮助,请采纳一下,谢谢。

C语言求值,谢谢
3>-4,a>b为真,!(a>b)为假,值为0。-4≠5,b!=c,值为1。0+1=1 3+(-4)=-1≠0,a+b为真。-4-5=-9≠0,b-c为真,(a+b)&&(b-c)的值为1 1||1,值为1,因此结果是1

C语言程序设计,求值
他们都错了 应当是2,实际上应当是这样:if(a<b){ if(b<0){ c=0;}else{ c++;} } 实际上没有进行到if里,直接跳出来,输出原来的c

C语言学习易错知识点总结 | 来看看我的刷题经验!
运算符优先级的问题:掌握运算符优先级是C语言学习的关键,优先级从高到低包括指代所属关系的运算符、单目运算符、算术运算符、关系运算符、位运算符和逻辑运算符。理解优先级有助于正确解析表达式。结合方向:运算符结合方向分为左结合和右结合,单目运算符、条件运算符和赋值运算符是右结合,其他符号是...

C语言参数求值问题
1.*和++的优先级与结合性问题 两个的优先级是相同的,这时候结合性是自右向左的。这样,2.printf在很多编译器中,执行顺序都是自右向左的。所以,不同的编译器确实存在不同的结果。给出一种结果:2 2 执行后,p和q都指向a的下个单元 3 2 执行时,先做(*q)++输出,将a的内容加1,然后...

相似回答
大家正在搜