搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 求解,求大伙赐教!
标题:
求解,求大伙赐教!
只看楼主
新人入门
等 级:
论坛游民
帖 子: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
等 级:
蜘蛛侠
威 望:
4
帖 子:331
专家分:1433
注 册:2014-8-31
第
2
楼
得分:10
简单说说:
今天刚刚有人问(++i)*(++i) 可惜被关闭帖子了
这种问题最好不要问,也不要去解释,正规编程不允许出现这样出现歧义的代码。
我来简单说说:(++i)*(++i)这种,如果从左向右编译,或者从右往左编译,结果是一样的。
但是,C的业内规定,编译时遇到同一个变量两次或者多次进行++运算时,联编时结果汇总一下,就是说无论那个++都在全部++后,才执行。只要统计++次数就行。
所以(++i)*(++i)这种指令 你就知道为什么了
同样(i++)*(i++)也不解释
2014-09-21 20:12
zyb2756
等 级:
论坛游民
帖 子:2
专家分:14
注 册:2014-9-21
第
3
楼
得分: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
等 级:
贵宾
威 望:
12
帖 子:353
专家分:1253
注 册:2014-4-22
第
4
楼
得分:0
这个帖子竟然没有被锁。
代码测试环境: WinXP+C-Free5.0.
2014-09-22 12:48
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
5
楼
得分:0
以下是引用
vvvcuu
在2014-9-22 12:48:54的发言:
这个帖子竟然没有被锁。
到现在为止没有出现错误解答,所以不锁。
授人以渔,不授人以鱼。
2014-09-22 22:58
新人入门
等 级:
论坛游民
帖 子:13
专家分:12
注 册:2014-9-5
第
6
楼
得分:0
回复 3 楼 zyb2756
谢谢!因为这是一个习题,开始有点搞不明白,现在明白了
2014-09-23 17:52
6
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-436425-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.336596 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved