函数调用问题

谁能告诉我运行的过程... 谁能告诉我运行的过程 展开
 我来答
南曼衍zc
2013-09-15 · TA获得超过185个赞
知道小有建树答主
回答量:125
采纳率:100%
帮助的人:157万
展开全部
#define表示宏定义,
#define M N 的意思就是用N去替换代码里出现的M
#define M(X) EXP(x) 的意思就是用表达式EXP(x)去替换代码里出现的M(x)
宏定义的特点是在编译前完成所有宏的替换。

prt(a+2); 等价于:(用到第三个#define)
printf(out(a+2));等价于:(用到第二个#define)
printf("%d",(int)item(a+2));等价于:(用到第一个#define)
printf("%d",(int)a+2*10);
所以输出结果就是 a+2*10 = 2 + 2*10 = 2 + 20 = 22
--------------------------解释--------------------------------------
尤其注意宏只是替换,所以是否加括号会影响最终的结果,如果第一个#define写成:
#define item(a) (a)*10
那么 printf("%d",(int)item(a+2)); 会变为
printf("%d",(int)(a+2)*10);
这样的话输出结果是 (a+2)*10 = (2+2)*10 = 4*10 = 40
----------------------------------------------------------------------
注意:由于题中第一个#define的a没有加括号所以应该是22而不是40。
良好016
2013-09-15
知道答主
回答量:12
采纳率:0%
帮助的人:2万
展开全部
第一行:宏定义,不用说了。第二行也是宏定义,(int)是强制转换成整型。第三行,宏定义。
函数开始:a=2,不用说了,然后prt(a+2);相当于printf(out(a+2));然后这个又相当于
printf("%d",(int)item(a+2));继续带入,相当于:printf("%d",(int)a+2*10);
a=2,所以,结果就是2+2*10=22

我靠,楼上的详细,牛x
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式