vc6.0中运算符的一个问题

paschen 2012-02-08 12:03:56
书上一道题,求输出结果:
#include <iostream.h>
int fun(int x, int y)
{
return x*y;
}
void main()
{
int k=5;
cout<<fun(k++,++k)<<endl;
}

答案是36.
可我还是没太懂,求各位大侠帮忙解释下。
另外:这程序和下面这个难道不等价吗?

#include <iostream.h>
int fun(int x, int y)
{
return x*y;
}
void main()
{
int k=5;
int a,b;
a=k++;
b=++k;
cout<<fun(a,b)<<endl;
}

求分析,谢了
...全文
110 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengzhigang123 2012-02-19
  • 打赏
  • 举报
回复
运算顺序是从右向左的。
paschen 2012-02-08
  • 打赏
  • 举报
回复
可以帮我讲详细点吗
jyh_baoding 2012-02-08
  • 打赏
  • 举报
回复
当然是36了,一个内存
paschen 2012-02-08
  • 打赏
  • 举报
回复
2楼的有点懂了,但为什么是先算后面一个参数++k呢?
gold_water 2012-02-08
  • 打赏
  • 举报
回复
++k先运算
k++后运算
fun(k++,++k)相当于:
a = k;
b = k;

a = k+1;
fun(b,a);
b = k+1;
heartszhang 2012-02-08
  • 打赏
  • 举报
回复

哪本书?请扔了。

c++标准规定,函数参数的计算顺序是unsequenced。


Value computations and side effects associated with different argument expressions are unsequenced.


c++又规定,如果一个表达式中用到同一个变量,其中最少一个是写入,另外一个可以是写入或者读取,同时如果这2个变量的计算顺序是unsequenced,那么该表达式是undefined-behavior

所以,这完全是个非法的c++程序。
shiyunqiang 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gold_water 的回复:]

++k先运算
k++后运算
fun(k++,++k)相当于:
a = k;
b = k;

a = k+1;
fun(b,a);
b = k+1;
[/Quote]

正解
rubywang731 2012-02-08
  • 打赏
  • 举报
回复
你最好先去看看c++的运算那一章。起码简单的运算顺序还是要知道的。c的运算一般都是从右向左的。
a++和++a一个是先赋值,再运算,一个是先运算,再赋值。
mangguoapple 2012-02-08
  • 打赏
  • 举报
回复
同意2楼的说法
jiangyuer_xx 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jxnuzhouguohong 的回复:]

函数参数中计算顺序是从右往左的
[/Quote]
楼上正解
jxnuzhouguohong 2012-02-08
  • 打赏
  • 举报
回复
函数参数中计算顺序是从右往左的

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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