一个C语言的输出问题,大家进来好表一下意见

foreveryyl 2003-09-30 11:32:12
#define m(a,b) (a>b)?a:b
main()
{
int i=10,j=15;
printf("%d",10*m(i,j));
}
这个程序的输出结果是15
和这个一样
main()
{
int i=10,j=15;
printf("%d",m(i,j));
}
但是:
#define m(a,b) (a>b)?a:b
main()
{
int i=10,j=15;
printf("%d",m(i,j)*10);
}
这个的结果是150
真不理解这个C语言的输出是怎么定义的
大家发表一下看法吧1
...全文
79 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anjuse 2003-10-05
  • 打赏
  • 举报
回复
pebble(铿锵石头) 解释的好啊

c 的基础学习的那么的好 佩服啊

得2个三角形是应该的
wodeyouxian 2003-10-05
  • 打赏
  • 举报
回复
pebble(铿锵石头) 解得好啊

shenyc 2003-10-01
  • 打赏
  • 举报
回复
printf("%d",...)是自右向左计算的,假如定义:int i=10,j=5;

main()
{
int i=10,j=5;
printf("%d",m(i,j));
}
输出是5

main()
{
int i=10,j=5;
printf("%d",m(i,j)*10);
}
输出是50
52juanjuan 2003-10-01
  • 打赏
  • 举报
回复
OK
wander110 2003-10-01
  • 打赏
  • 举报
回复
*不是乘号
AbeiXu 2003-10-01
  • 打赏
  • 举报
回复
==>>pebble(铿锵石头)

好!

up
yonge23 2003-10-01
  • 打赏
  • 举报
回复
厉害!
sdksdksdk 2003-10-01
  • 打赏
  • 举报
回复
单目的为从右往左,其他的基本上为从左往右,但得先比较优先问题。
finalvictory 2003-10-01
  • 打赏
  • 举报
回复
好喷饭啊~~~楼上的楼上告诉我C里面什么地方从左到右“计算”啊?
「已注销」 2003-10-01
  • 打赏
  • 举报
回复
解释得好啊
foreveryyl 2003-09-30
  • 打赏
  • 举报
回复
谢了
lcs560 2003-09-30
  • 打赏
  • 举报
回复
right,and good.
zk2486 2003-09-30
  • 打赏
  • 举报
回复
自定义的问题
pebble 2003-09-30
  • 打赏
  • 举报
回复
#define
定义的宏在编译的时候直接替换,不要理解成和函数一样
实际上你的第一个程序,在完成宏替换后就是这个样子的
main()
{
int i=10,j=15;
printf("%d",10*(i>j)?i:j );
}
首先i>j判断后,为假,也就是0,0乘以10还是0,所以整个10*(i>j)作为逻辑运算结果就是假,那么当然返回j

那么第三个经过宏替换后就成了
main()
{
int i=10,j=15;
printf("%d",(i>j)?i:j*10);
}
得到150也就不难理解了吧
guohua24 2003-09-30
  • 打赏
  • 举报
回复
运算符优先级问题

2,959

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧