QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 649|回复: 3

我想问C语言

[复制链接]
发表于 2003-7-30 15:38:44 | 显示全部楼层 |阅读模式
下面的语句:
int i;
k = (++i)+(++i)+(++i);

如果按理解k的值是:18但是为什么计算机得的结果是16
发表于 2003-7-30 15:55:10 | 显示全部楼层
interesting:我是这样试的:

#include<stdio.h>
int k,i;
int main()
{
i=0;
k = (++i)+(++i)+(++i);
printf("the number k is %d\n",k);
return(0);
}

linux下运行的结果是   7

大家看看。
回复

使用道具 举报

发表于 2003-7-30 16:51:36 | 显示全部楼层
是这么回事,实际运行过程是:
int k=((++i)+(++i))+(++i);
对于前面一个括号,实际上是两个i相加,(++i)+(++i)结果2+2=4,第一个++i并没有用什么临时的内存来存它的值,而是直接改变了i变量的值,后面又一次++i再次更改了i的值,所以结果是2+2,而不是1+2,然后再将i自加一次,这是i的值是3,然后将i的值和前面得到的4相加,得到7。
如果将式子改成这样:
int k=(++i)+((++i)+(++i));
k的值就是你想要的9了,因为这个时候,第一个++i将i的值变成1(记住,没有什么临时的内存存放这个1,而是i的值就是1),后面那个括号两次++i使i的值变成3,所以结果是9。
对付这个类问题的原则就是:根本没有使用++i这个东西,++i只是使i的值加一供以后使用,只用到i,所以结果取决于i的当前值,但是( xxx + yyy)这个表达式是有自己的值的。
表达得不太好,凑和地理解吧  
回复

使用道具 举报

发表于 2003-7-30 17:50:45 | 显示全部楼层
确实啊~VC下也是7~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 08:58 , Processed in 0.059655 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表