A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美世界 中级黑马   /  2014-6-27 20:44  /  1656 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家看看这段程序,不要运行,猜猜输出结果~
#include <stdio.h>
int main()
{
    int i=1;
    printf("%d\n%d\n",-i++,i);
    return 0;
}

17 个回复

倒序浏览
结果是:
1
-1
回复 使用道具 举报
写错了,应该是:
-1
1
回复 使用道具 举报
结果是:
-1
2
回复 使用道具 举报
结果是:
-1
2
回复 使用道具 举报
哈哈!!!
回复 使用道具 举报
除了&&和||,同一运算符的两个操作数谁先求值是标准未定义的,结果取决于编译器。应该避免写这样的表达式。
回复 使用道具 举报
曹雨 中级黑马 2014-6-28 16:44:46
8#
输出结果是  -1,2
回复 使用道具 举报
TLTY 初级黑马 2014-6-28 17:03:31
9#

楼主你确定吗,输出语句的参数值顺序是是从右到左的啊
回复 使用道具 举报
fantacyleo 发表于 2014-6-28 16:15
除了&&和||,同一运算符的两个操作数谁先求值是标准未定义的,结果取决于编译器。应该避免写这样的表达式。 ...

同一运算符的两个操作数你指的是我的代码中的什么,是不应该是同一操作数左右的两个运算符?运算符都有优先级,在同等优先级的情况下是按照结合性来决定运算顺序的。
回复 使用道具 举报
TLTY 发表于 2014-6-28 17:03
楼主你确定吗,输出语句的参数值顺序是是从右到左的啊

参数值顺序从左到右依次与格式字符串中的站位符匹配输出吧?

嗯,-i++,“-”运算符和“++”运算符是同一优先级的,而且是右结合,也就是说计算顺序从右向左,先计算i++,然后再对i++的结果取负。(-i++)这个表达式的值为-1,i自加1,i的值=2。
回复 使用道具 举报
TLTY 初级黑马 2014-6-28 18:54:03
12#
完美世界 发表于 2014-6-28 18:47
参数值顺序从左到右依次与格式字符串中的站位符匹配输出吧?

嗯,-i++,“-”运算符和“++”运算符是同 ...

我是说输出语句的两个参数应该先算i,再算-i++,

点评

对我帮助很大,再次感谢!  发表于 2014-6-28 21:31
回复 使用道具 举报
完美世界 发表于 2014-6-28 18:37
同一运算符的两个操作数你指的是我的代码中的什么,是不应该是同一操作数左右的两个运算符?运算符都有优 ...

嗯,我刚才没有表述清楚。应该这样说:逗号运算符、&&和|| 是c标准规定了求值顺序,其他运算符则没有规定操作数中表达式的求值顺序。一个函数的多个参数之间的逗号并不是逗号分隔符,参数表达式的计算次序是没有保证的,因为c标准没有做出规定,你看到的结果只是某个编译器的做法。

点评

对我帮助很大,再次感谢!  发表于 2014-6-28 21:29
回复 使用道具 举报
TLTY 发表于 2014-6-28 18:54
我是说输出语句的两个参数应该先算i,再算-i++,

是从左到右吧,为什么先算i?
回复 使用道具 举报
fantacyleo 发表于 2014-6-28 20:26
嗯,我刚才没有表述清楚。应该这样说:逗号运算符、&&和|| 是c标准规定了求值顺序,其他运算符则没有规定 ...

谢谢你得回复,我再仔细想想。
回复 使用道具 举报
TLTY 发表于 2014-6-28 18:54
我是说输出语句的两个参数应该先算i,再算-i++,

谢谢你的回复,我再仔细想想。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马