| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5126 人关注过本帖
标题:#define SQUARE(a)((a)*(a))
只看楼主 加入收藏
xuxu_c
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-6-11
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:10 
#define SQUARE(a)((a)*(a))
程序代码:
#include <stdio.h>
#define SQUARE(a)((a)*(a))
main(){
int a=5;
int b=SQUARE(a++);
printf("%d",b);
getch();
}

结果是25,我怎么觉得应该是30啊?
程序代码:
#include <stdio.h>
#define SQUARE(a)((a)*(a))
main(){
int a=5;
int b=(a++)*(a++);
printf("%d",b);
getch();
}

这个结果怎么也是25?还是觉得应该是30


the answer is:
一个表达式多个++取决于编译器的方式,建议不要在同一个表达式中对同一变量施行多次自增运算
参见二楼heartnheart的说法


[ 本帖最后由 xuxu_c 于 2010-6-18 11:41 编辑 ]
搜索更多相关主题的帖子: SQUARE define 
2010-06-17 12:02
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:4 
经过预处理器处理后,代码变成了
int b = (a++)*(a++);也就是下面那个代码的形式,
而C标准并未规定编译器在一个表达式中何时进行自增运算,故结果可能是5*5(先把a取出,最后进行两次自增),也可能是(5*6)(先取出第一个a,自增后取出第二个a),输出25说明你的编译器采用了前面那种方式罢了。
所以建议不要在同一个表达式中对同一变量施行多次自增运算
2010-06-17 12:15
myhnuhai
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:3
帖 子:425
专家分:1725
注 册:2010-3-17
收藏
得分:2 
楼上说的对,对于自增或自减运算如果是a++那就是先用a的值运算,后再自增,如果是++a那就先自增再运算!你这两道题都一样先运算在自增,
你如果把第一个程序里面调用的函数括号里的值写成b=SQUARE(++a)那结果就是36了;呵呵呵

不要让肮脏的记忆,迷失了原本纯洁的心灵!
2010-06-17 12:35
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 3楼 myhnuhai
我很怀疑你是否看懂了你的楼上所说的话 。/

我就是真命天子,顺我者生,逆我者死!
2010-06-17 12:42
xuxu_c
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-6-11
收藏
得分:0 
回复 3楼 myhnuhai
int b=SQUARE(++a);
结果是49
很奇怪
2010-06-17 12:56
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
回复 5楼 xuxu_c
这说明你的编译器先把a自增两次,在取出a进行运算,即7*7
2010-06-17 13:16
reddu007
Rank: 1
等 级:新手上路
帖 子:3
专家分:6
注 册:2010-6-16
收藏
得分:4 
a=5
++a后a=6
++a后a=7
所以结果是49
等于30绝对不可能  a是一个变量  无论用a++还是++a  a都只能同时取一个值 a=5同时又a=6  你觉得这符合逻辑吗

2010-06-17 13:21
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
回复 7楼 reddu007
不解释……╮(╯_╰)╭
2010-06-17 13:26
xuxu_c
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-6-11
收藏
得分:0 
二楼跟七楼的说法貌似有冲突。。。
2010-06-17 13:55
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
建议先搞清楚上次吃米饭的时候的第100粒米,你是用哪两颗牙咬碎的,然后再来思考这个问题。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-06-17 16:25
快速回复:#define SQUARE(a)((a)*(a))
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023916 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved