C程序试题,赐教!

来源:百度知道 编辑:UC知道 时间:2024/05/16 23:23:59
#define f(x) (x*x)
main()
{ int a,b;
a=f(8)/f(4); b=f(4+4)/f(2+2);
printf("&d,%d\n",a,b);
}
程序运行结果是 4,3
我不知道 b为什么=3,弄不清楚 "&"标志,还请达人指教,万分感激!
为什么f(4+4)调用 f(x)后变成,4+4*4+4呢?

宏是文本带入
b=f(4+4)/f(2+2);
b=(4+4*4+4)/(2+2*2+2);
b=24/8
b=3
&d肯定是你抄错了,printf只能出现格式控制符%d,%f...这样的

&一般情况下是取地址或者位操作,这里是不能出现的

说了是文本带入,意思就是原封不动的带入
#define f(x) (x*x)
x是是4+4相当于字符串,直接带进去就是(4+4*4+4)

printf("&d,%d\n",a,b);
写错了
应该是

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

对于b
f(4+4)/f(2+2) 被替换为

(4+4*4+4)/(2+2*2+2)
值为3

因为#define只是将f(x) 简单的替换成(x*x),他是不做任何处理的,仅仅只是替换.
所以有如下式子:
f(4+4)=(4+4*4+4)=24
f(2+2)=(2+2*2+2)=8
所以结果就为3
如果想取得理想的值,那应该这样写
#define f(x)=((x)*(X))