黑马程序员技术交流社区

标题: 有趣的小问题,大家看看 [打印本页]

作者: 完美世界    时间: 2014-6-27 20:44
标题: 有趣的小问题,大家看看
大家看看这段程序,不要运行,猜猜输出结果~
#include <stdio.h>
int main()
{
    int i=1;
    printf("%d\n%d\n",-i++,i);
    return 0;
}


作者: TLTY    时间: 2014-6-27 21:02
结果是:
1
-1
作者: TLTY    时间: 2014-6-27 21:03
写错了,应该是:
-1
1

作者: 完美世界    时间: 2014-6-28 08:37
结果是:
-1
2
作者: libra    时间: 2014-6-28 10:23
结果是:
-1
2
作者: Emy♪    时间: 2014-6-28 10:49
哈哈!!!
作者: fantacyleo    时间: 2014-6-28 16:15
除了&&和||,同一运算符的两个操作数谁先求值是标准未定义的,结果取决于编译器。应该避免写这样的表达式。
作者: 曹雨    时间: 2014-6-28 16:44
输出结果是  -1,2
作者: TLTY    时间: 2014-6-28 17:03
完美世界 发表于 2014-6-28 08:37
结果是:
-1
2

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

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

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

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

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

我是说输出语句的两个参数应该先算i,再算-i++,
作者: fantacyleo    时间: 2014-6-28 20:26
完美世界 发表于 2014-6-28 18:37
同一运算符的两个操作数你指的是我的代码中的什么,是不应该是同一操作数左右的两个运算符?运算符都有优 ...

嗯,我刚才没有表述清楚。应该这样说:逗号运算符、&&和|| 是c标准规定了求值顺序,其他运算符则没有规定操作数中表达式的求值顺序。一个函数的多个参数之间的逗号并不是逗号分隔符,参数表达式的计算次序是没有保证的,因为c标准没有做出规定,你看到的结果只是某个编译器的做法。
作者: 完美世界    时间: 2014-6-28 21:10
TLTY 发表于 2014-6-28 18:54
我是说输出语句的两个参数应该先算i,再算-i++,

是从左到右吧,为什么先算i?
作者: 完美世界    时间: 2014-6-28 21:27
fantacyleo 发表于 2014-6-28 20:26
嗯,我刚才没有表述清楚。应该这样说:逗号运算符、&&和|| 是c标准规定了求值顺序,其他运算符则没有规定 ...

谢谢你得回复,我再仔细想想。
作者: 完美世界    时间: 2014-6-28 21:28
TLTY 发表于 2014-6-28 18:54
我是说输出语句的两个参数应该先算i,再算-i++,

谢谢你的回复,我再仔细想想。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2