游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2703|回复: 7

++,--运算问题,大家帮我分析一下

[复制链接]

32

主题

108

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2007-10-25 20:43:00 | 显示全部楼层 |阅读模式
#include <iostream>
using namespace std;

int func(int x, int y)
{
  cout << "x = " << x << " , y = " << y << endl;
  return x + y;
}
void main()
{
  int a = 4;
  int b = func(a--, ++a);

  cout << "b = " << b << endl;
  cout << "a = " << a << endl;

  getchar();
}
输出结果为:
x = 5, y = 4
b = 9
a = 4
大家分析一下++,--运算到底是怎么进行的,谢谢各位!

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-26 03:04:00 | 显示全部楼层

Re: ++,--运算问题,大家帮我分析一下

C/C++默认(__cdecl)为:函数调用时参数从右向左依次处理(压入堆栈),所以先++a,再a--,其它的不用说明了吧

32

主题

108

帖子

108

积分

注册会员

Rank: 2

积分
108
 楼主| 发表于 2007-10-26 09:42:00 | 显示全部楼层

Re:++,--运算问题,大家帮我分析一下

如果参数是从右向左计算,可是为什么"int b = func(++a, a + 2);"会输出:
x = 5, y = 7
b = 12
a = 5
按这个输出结果,参数是从左向右执行的.我觉得是不是因为++的优先级比+高,所以先算++a,再算a+2?

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-26 13:22:00 | 显示全部楼层

Re: Re:++,--运算问题,大家帮我分析一下

iron: Re:++,--运算问题,大家帮我分析一下

如果参数是从右向左计算,可是为什么"int b = func(++a, a + 2);"会输出:
x = 5, y = 7
b = 12
...


a+2只是传入了一个临时变量,值等于a+2, a本身并没有加2

你可以试试 b = func(++a, (a=a + 2)),就明白了:)

2

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
QQ
发表于 2007-10-26 15:40:00 | 显示全部楼层

Re: ++,--运算问题,大家帮我分析一下

告诉你一个VC++的功能!F11 单步调试,你可以追踪一下内存看看,到底什么时候赋值,值是多少都可以一目了然!

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-10-26 16:57:00 | 显示全部楼层

Re:++,--运算问题,大家帮我分析一下


c++ 这方面是有漏洞的. 尽量不要在一句语句中同时修改项和读取项.因为顺序是不确定的

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-10-26 17:07:00 | 显示全部楼层

Re:++,--运算问题,大家帮我分析一下

这种写法本来就属于标准未定义的行为,不同编译器会有不同的结果,不能这样写,也更没有必要讨论。

17

主题

282

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2007-10-26 18:12:00 | 显示全部楼层

Re:++,--运算问题,大家帮我分析一下

感觉2F 4F说得很清楚了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-19 23:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表