C语言问题:

来自:视觉    更新日期:早些时候
C语言问题~

你认为应该是多少呢?输出是正确的,其值就是a[0],它被初始化为1.1。因为fun中为s指针重新分配了指向,*s=*p1+*p2++;这一句中的s已不再指向a了。因为指针形参本身也是拷贝调用,所以main中的s仍然是指向a的,printf("%5.2f
",*s);输出自然是a[0]。可以这样验证,在fun中的*s=*p1+*p2++;后加一句printf("%5.2f
",*s);,它就应该输出11.1了……

'\xxx'类型的字符常量中,xxx代表8进制整数,其含义是某字符的ASCII码。
而\483' 里483不是合法ASCII码范围。

首先答案是A。
分析
#define ADD(x,y) x+y //注意这个宏,没有加()
int main()
{
int x(2),y(2),s; //x(2), y(2),相当于 x = 2, y = 2.
s=ADD(x+1,y+2)+1; //因为宏是直接展开的,这里展开的结果是 x+1+y+2+1 = 2+1+2+2+1=8
printf("s=%d",s);//所以S = 8;
return 0;
}
这题考的是宏展开的问题,
记住,写宏的时候,一定要注意加上()。
变量,表达式,整个宏,3个地方都要加。防止调用出错。

#define ADD(x,y)x+y//宏替换是先直接替换再计算的
int main()
{
int x(2),y(2),s;
s=ADD(x+1,y+2)+1;//ADD(x+1,y+2)= x+1+y+2+1=2+1+2+2+1=8
printf("s=%d",s);
return 0;
}
有没有编译错误用编译器运行一下就知道了,你觉得哪里错误呢?
可是我的答案算出来是8啊,我觉得是选择A的

s=ADD(x+1, y+2)+1 替换后结果为s = x+1+y+2+1; s应该为8 选A

s=8 s=ADD(x+1,y+2)+1; 被翻译成 s=(x+1)+(y+2)+1 还有这事C++的赋值不是C

自己运行看看结果再说。
VC6.0运行结果是s=8

看一下图片,就是运行之后的错误
我这里运行正确,答案是8


C语言问题:视频

相关评论:

相关主题精彩

版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

Copyright © 喜物网