c语言的一些小小小问题

1.'\019'为什么不是合法字符常量?
2.#define a 5
#define b a+3
#include<stdio.h>
void main()
{
x=a+3;
y=a*b+x;
} 的结果 y为什么是36?

1,\这个转义字符,如果出现'\'应该用'\\'来表示,'\0'这个是字符串结束的标志,后面的字符就没有用了。所以是不合法常量,应该写成'\\019'就可以了。
2,#define大多数情况下只是起到替换的作用(所以要记得家括号),y=a*b+x替换一下就是y=a*a+3+x,在替换一下就是y=5*5+3+5+3,这样就得到36了。如果#define b (a+3)这样就跟你意想的一样了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-17
是这样的,define定义的a 和 b是直接用替换,不会计算结果,
x=a+3
y=a*b+x
计算是这样的
x=5+3
也就是说x=8
y=5*5+3+8=36

如果把 #define b a+3 换成 #define b 3+a 结果又会是28

但把 y=a*b+x;改成 y=a*(b)+x;结果就会是48
第2个回答  2013-07-17
宏是直接展开的,不做计算
y=a*b+x
展开后就是
y=a*a+3+a+3
这样是36
而不是
y=a*(a+3)+a+3追问

亲 第一个问题呢?

追答

用指针的话没事,\0也可以输出,输出的内容是空的,但是你用十六进制输出就能看到差别了,

第3个回答  2013-07-17
x=a+3;
y=a*b+x;
预编译后(#define 意味着替换 )
x=5+3; 8
y=5*5+3+x; 25+3+8(36)
第4个回答  2013-07-17
'\019'
这种形式是用三位八进制数字表示的转义字符,但是9并不是八进制数字,所以不合法。
相似回答