免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wolfling2000
打印 上一主题 下一主题

[求助]:一个关于运算符优先级的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-10-21 10:14 |只看该作者

[求助]:一个关于运算符优先级的问题

不明白,那位大侠解释一下吧。

论坛徽章:
0
12 [报告]
发表于 2005-10-21 10:17 |只看该作者

[求助]:一个关于运算符优先级的问题

原帖由 "xw009" 发表:
int j, i = 3;
j = i * (++i + 3);

也是28


i=3;
j=(i+3)*++i;
是24
为什么啊?!

论坛徽章:
0
13 [报告]
发表于 2005-10-21 11:10 |只看该作者

[求助]:一个关于运算符优先级的问题

怎么说呢!因为乘号的优先级比加号要大  所以如果要算 i+3 的话就要加一个括弧! 括号的作用只是使 i+3 而已!并不会使运算的顺序从左到右有所改变!

论坛徽章:
0
14 [报告]
发表于 2005-10-21 11:26 |只看该作者

[求助]:一个关于运算符优先级的问题

不知我这样理解对不对?
i=3;
j=++i*(i+3);
是28
在++i后,i变为4,所以 j=4*(4+3)

i=3;
j=(i+3)*++i;
是24
j=(3+3)*4

i=3;
j=i*(++i + 3);
我理解j=3*(4+3)
但是此处也是28?为什么啊。
小弟可能是瞎说,请给位前辈指教。

论坛徽章:
0
15 [报告]
发表于 2005-10-21 12:05 |只看该作者

[求助]:一个关于运算符优先级的问题

我认为应该是j=24,i=4。因为混合运算时应该先看优先级,如果优先级相同才看结合性,()的优先级高于++所以应该先算()里的内容再算++i。

论坛徽章:
0
16 [报告]
发表于 2005-10-22 15:01 |只看该作者

[求助]:一个关于运算符优先级的问题

因为C/C++标准没有对表达式中操作数的求值顺序作出硬性规定(这样做有利于编译器根据具体情况进行灵活处理),如果一个表达式(如++i*(i+3))的值和操作数的求值顺序有关,我们就说这个表达式是无定义(undefined)的。如果在程序中出现标准未定义的行为,这个程序就是一个非法的程序。

与操作数求值顺序有关的表达式的特征是:表达式中存在一个这样的变量,这个变量被改变至少一次,但是却被使用至少两次。例如:表达式 ++i*(i+3) 中变量 i 被改变了 1 次(++i),但是被使用 2 次,所以这个表达式的值是没有定义的。

需要说明的是,运算符的优先级、结合性以及括号的使用只是决定了操作数的组合顺序,可以认为操作数的求值顺序不受其影响。

函数的参数等同于一般表达式中的操作数。因此,类似 func( ++i, i+3 ) 这样的函数调用其结果也是无定义的。

论坛徽章:
0
17 [报告]
发表于 2005-10-23 11:08 |只看该作者

[求助]:一个关于运算符优先级的问题

楼主 所说的这种表达式在具体的编程使用中是不会这么写的
很容易引起二义性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP