有个小问题请教一下

LBJKB 2011-04-17 09:30:30

#include <iostream>
#define SQUARE(a) ((a)*(a))
using namespace std;
int Square(int a)
{
return a*a;
}

int main()
{
int a = 5;
int b = 0;
b = SQUARE(a++);
cout<<a<<endl<<b<<endl;//为什么a=7,b=25
b = SQUARE(++a);
cout<<a<<endl<<b<<endl;//为什么a=7,b=49
}

a的值为什么计算了两次?
...全文
60 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LBJKB 2011-04-17
  • 打赏
  • 举报
回复
多谢各位了。
书虫 2011-04-17
  • 打赏
  • 举报
回复
一般情况下不要用宏定义函数,宏会带来意想不到的问题,就如你的问题!
無_1024 2011-04-17
  • 打赏
  • 举报
回复

#include <iostream>
#define SQUARE(a) ((a)*(a))
using namespace std;
int Square(int a)
{
return a*a;
}

int main()
{
int a = 5;
int b = 0;
b = SQUARE(a++);
cout<<a<<endl<<b<<endl;//a=7,b=25

b = SQUARE(++a);
cout<<a<<endl<<b<<endl;//a=9,b=81
}

++i和i++的优先级区别
楼主的运行结果不一样啊 这是我的运行结果
反映的情况就是++前置和后置的区别
luohaohahaha 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lbjkb 的回复:]

b = SQUARE(a++) = ((a++)*(a++)) = 5*6 = 30这么理解为什么不对啊?
[/Quote]
错了, b = SQUARE(a++) = ((a++)*(a++)) = 5*5 = 25; 经过赋值运算,b=25后,i才自增2次,得到i=7.
b = SQUARE(++a) = ((++a)*(++a)) = 9*9 = 81; 这是在上层a=7的基础上,先自增2次,得到i=9,然后 9*9=81;
hdxu8511 2011-04-17
  • 打赏
  • 举报
回复
#include <iostream>
#define SQUARE(a) ((a)*(a))
using namespace std;
int Square(int a)
{
return a*a;
}

void main()
{
int a = 5;
int b = 0;
b = SQUARE(a++);
cout<<a<<endl<<b<<endl;//为什么a=7,b=25,a++是先计算后++
b = SQUARE(++a);
cout<<a<<endl<<b<<endl;//为什么a=9,b=81,++a是先++后计算
}

//为什么a计算两次,因为你的define把SQUARE(a)定义成((a)*(a))的原因。

LBJKB 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hhh_hao 的回复:]
++i和i++的区别
[/Quote]
b的结果明显是只自增了一次嘛,怎么解释?
hhh_hao 2011-04-17
  • 打赏
  • 举报
回复
i=1; y=i++; 等效于:i=1; y=i; i=i+1; 则执行完后 y=1; i=2;

i=1; y=++i; 等效于:i=1; i=i+1; y=i; 则执行完后 y=2; i=2;
hhh_hao 2011-04-17
  • 打赏
  • 举报
回复
++i和i++的区别
LBJKB 2011-04-17
  • 打赏
  • 举报
回复
b = SQUARE(a++) = ((a++)*(a++)) = 5*6 = 30这么理解为什么不对啊?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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