| 查看: 2025 | 回复: 32 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
sunchuanxi新虫 (初入文坛)
|
[求助]
关于c语言中++i计算的问题 已有4人参与
|
||
|
请问q的值为多少,我试了下是22,但不理解 #include "stdio.h" void main() { int j=5,q; q=(++j)+(++j)+(++j); printf("%d",q); } |
» 猜你喜欢
情人节自我反思:在爱情中有过遗憾吗?
已经有6人回复
基金正文30页指的是报告正文还是整个申请书
已经有4人回复
今年春晚有几个节目很不错,点赞!
已经有6人回复
球磨粉体时遇到了大的问题,请指教!
已经有15人回复
过年走亲戚时感受到了所开私家车的鄙视链
已经有5人回复
江汉大学解明教授课题组招博士研究生/博士后
已经有3人回复
virtualzx
木虫 (著名写手)
- 应助: 263 (大学生)
- 金币: 7161.3
- 红花: 54
- 帖子: 1605
- 在线: 317.6小时
- 虫号: 2069080
- 注册: 2012-10-18
- 性别: GG
- 专业: 理论和计算化学
【答案】应助回帖
|
24是因为vc认定三个++i的值是一样的,因为根据§5/4可以推测出所有左递增/递减算符可以提取到表达式之前,又递增递减算符都可以提取到表达式之后的结论,因此VC将这一表达式转化为 ++i; ++i; ++i; i+i+i ”谁会写出这样的语句”?其实几乎每个人都会,而且也是个重要的问题。这不只是表达式写法,而是C/C语音不完全解析顺序导致的。其他面向对象语言几乎都是可以不含糊的解析顺序的。这不只是++算符而已,如果任何表达式里有两个以上有side effect的函数,都有可能导致问题。这类含糊表达式非常常见,比如printf(..., x,f(x))这样简单的语句,如果f函数改变x的值,不同编译器都可能会给出不同的结果。 其他的例子,比如f(getc(), getc()),还有i=i++,还有以至于obj.f1()+obj.f2()这样常见的表达式,如果两个函数都有副作用,结果就可能因编译器不同而不同! 而这都是§5/4的结果。其实解析求值顺序不是不可能的,但是C本着速度第一的原则有意放松了标准 一个解决办法是,写程序时保证任何有返回值的函数没有副作用;而有副作用的都写成过程;但这样引入很大难度,实际上任何程序员都会写出很多依照标准含糊的C++表达式的。这也是提出C#语言的一个主要的原因之一。 发自小木虫IOS客户端 |
20楼2016-04-27 09:42:59
wo2cast
木虫 (著名写手)
- 应助: 43 (小学生)
- 金币: 3216.8
- 红花: 3
- 沙发: 1
- 帖子: 1859
- 在线: 332.9小时
- 虫号: 4389236
- 注册: 2016-01-31
- 性别: GG
- 专业: 控制理论与方法

2楼2016-04-25 22:03:45
sunchuanxi
新虫 (初入文坛)
- 应助: 2 (幼儿园)
- 金币: 601.4
- 红花: 1
- 帖子: 47
- 在线: 22.8小时
- 虫号: 3558373
- 注册: 2014-11-25
- 性别: GG
- 专业: 计算数学与科学工程计算
3楼2016-04-25 22:17:48
4楼2016-04-25 22:28:56













回复此楼