|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 求解,求大伙赐教!
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
455
人关注过本帖
标题:
求解,求大伙赐教!
只看楼主
加入收藏
新人入门
等 级:
论坛游民
帖 子: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
快速回复:
求解,求大伙赐教!
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.096600 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved