| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 455 人关注过本帖
标题:求解,求大伙赐教!
只看楼主 加入收藏
新人入门
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2014-9-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求解,求大伙赐教!
#include<stdio.h>
#define num(n) ((n)*(n))
void main()
{
   int i=1;
   while(i<=10)
   printf("%d\t",num(i++));
   printf("\n");
}
输出的结果为什么是:
1 9 25 49 81
搜索更多相关主题的帖子: include 
2014-09-21 19:10
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:10 
简单说说:
今天刚刚有人问(++i)*(++i) 可惜被关闭帖子了

这种问题最好不要问,也不要去解释,正规编程不允许出现这样出现歧义的代码。

我来简单说说:(++i)*(++i)这种,如果从左向右编译,或者从右往左编译,结果是一样的。
但是,C的业内规定,编译时遇到同一个变量两次或者多次进行++运算时,联编时结果汇总一下,就是说无论那个++都在全部++后,才执行。只要统计++次数就行。

所以(++i)*(++i)这种指令 你就知道为什么了
同样(i++)*(i++)也不解释
2014-09-21 20:12
zyb2756
Rank: 2
等 级:论坛游民
帖 子:2
专家分:14
注 册:2014-9-21
收藏
得分:10 
宏只是简单的替换了
实际上
printf("%d\t",num(i++)) 宏展开之后变成  printf("%d\t"((i++)*(i++)))
这儿增加了两次了


PS:说个题外话
另外 正如楼上说的 ++i+ ++i 这样的代码是最好不要出现的,因为这就涉及到了C99规范的盲区了
并没有严格要求计算次序,所以各个编译器的实现也不同的

例如: i=4;
        ++i+ ++i+ ++i;
这个在不同的编译器实现不同
有得编译器结果会是 19 ,而有个是21
因为有得 是 先算两个 ++i 之后取值再算余下的++i
有的是三个++i 一起算了再求和。
所以最好别用
2014-09-21 21:07
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
这个帖子竟然没有被锁。

代码测试环境:  WinXP+C-Free5.0.
2014-09-22 12:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用vvvcuu在2014-9-22 12:48:54的发言:

这个帖子竟然没有被锁。

到现在为止没有出现错误解答,所以不锁。

授人以渔,不授人以鱼。
2014-09-22 22:58
新人入门
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2014-9-5
收藏
得分:0 
回复 3 楼 zyb2756
谢谢!因为这是一个习题,开始有点搞不明白,现在明白了
2014-09-23 17:52
快速回复:求解,求大伙赐教!
数据加载中...
 
   



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

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