黑马程序员技术交流社区

标题: 一个很简单的程序,但是想不通,求大神给予解答 [打印本页]

作者: wawsc5354524    时间: 2014-8-4 10:43
标题: 一个很简单的程序,但是想不通,求大神给予解答
本帖最后由 wawsc5354524 于 2014-8-5 00:28 编辑

for(cout=0;cout<10;cout++){
   cout=cout++;
}

我觉得程序运行的结果应该是9可是为什么答案是0呢?


谁可以详细的解释一下i++和++i,小弟初学者,不好意思,问题有点简单的让大神笑了,哈哈

作者: fxwb2005    时间: 2014-8-4 11:02
1、首先你for循环里的cout没有声明类型 当然我不知道你是不是还有其他代码在上面声明了cout 你这个循环cout输出肯定是将0~9输出。
2、i++和++i在单独使用的时候没有什么区别,都是i=i+1,但是如果用于赋值的时候,比如y=i++,则是先赋值再计算,拆开就是:y=i,i=i+1,所以y的值还是i,并没有+1;如果是y=++i,这是:i=i+1,y=i,这样y的值就是i+1之后的结果。
作者: 大成哥    时间: 2014-8-4 11:09
1楼解释的非常清楚了!
作者: wawsc5354524    时间: 2014-8-4 11:12
大成哥 发表于 2014-8-4 11:09
1楼解释的非常清楚了!

嗯,我也看到了,学习了
作者: wawsc5354524    时间: 2014-8-4 11:14
fxwb2005 发表于 2014-8-4 11:02
1、首先你for循环里的cout没有声明类型 当然我不知道你是不是还有其他代码在上面声明了cout 你这个循环cout ...

谢大神给予回答,请收下我的膝盖
作者: fxwb2005    时间: 2014-8-4 11:15
wawsc5354524 发表于 2014-8-4 11:14
谢大神给予回答,请收下我的膝盖

不是大神,也是只有些基础,相互学习!
作者: 会飞De石头    时间: 2014-8-4 11:20
count 声明不清楚  。。。1楼正解
作者: 冷风    时间: 2014-8-4 11:21
1楼解释好清楚,我一开始看到这个问题,还没注意到“cout没有声明类型”只是思考提的问题去了,看来我考虑问题还是不全面:lol。看来我还得继续努力:(
作者: wawsc5354524    时间: 2014-8-4 11:21
会飞De石头 发表于 2014-8-4 11:20
count 声明不清楚  。。。1楼正解

新手啦,不好意思,有很多漏洞。继续学习继续学习
作者: 扛把子    时间: 2014-8-4 11:27
这里暴露出一个问题,如果是int count=0;for(int x=0;x<10;x++){}
作者: 扛把子    时间: 2014-8-4 11:28
扛把子 发表于 2014-8-4 11:27
这里暴露出一个问题,如果是int count=0;for(int x=0;x

大括号里面是count=count++;
这时候大家觉得结果是什么呢?
作者: 扛把子    时间: 2014-8-4 11:30
扛把子 发表于 2014-8-4 11:28
大括号里面是count=count++;
这时候大家觉得结果是什么呢?

为什么会出现这样的结果呢?
作者: fantacyleo    时间: 2014-8-4 12:06
扛把子 发表于 2014-8-4 11:28
大括号里面是count=count++;
这时候大家觉得结果是什么呢?

结果是0   count变量自增1的动作必须完成并写入内存后,才会把count++表达式的值0赋值给count,因此count最后的值是0
作者: 반야_바라_밀    时间: 2014-8-4 15:36
学的好细啊。。。
作者: kakasa    时间: 2014-8-4 17:03
没声明 cout能编译通过??
作者: 申航航    时间: 2014-8-4 17:35
i++是先使用i 的值,然后使i加1,++i是先让i加1然后再使用i的值,不管i++,还是++i最后都会使i加1
作者: 柳超    时间: 2014-8-4 18:16
首先説不知道你怎么説的这个结果!我运行了下!在cout=cout++后面加了个输出cout     结果是1--9!但是我不得不説的问题是你这名 cout=cout++;这名代码我试着把for里面的cout ++删除然后动行结果死循环0输出!就这个结果而言你这句代码应该是有问题的,cout=cout++;优先级来看,先是cout++计算,然后cout+1;这过程中还有个步骤就是cout=cout;(0=0)的赋值过程!没有意义,cout+1运算了但是没有保存!所以你这句代码完全是没有必要存在的
作者: 柳超    时间: 2014-8-4 18:20
++i 和 i++一楼第二条讲的很清楚! 你説结果是0我觉得你还是把源码贴出来大家才能邦你找到原因
作者: 南国    时间: 2014-8-8 20:39
本帖最后由 南国 于 2014-8-8 20:52 编辑

第一个问的回答:因为你前面应该定义了int count=1,在哪呢?count的作用域从结果来看应该是一个全局变量,然后你定义了一个方法,方法中用到了count,这里面count也可以这样看(int i=count)i是方法的局部变量,作用域为方法范围,count的值不改变,原题应该是这样(简略写下哈)mian(String[] args){int count=1;//count定义在方法外,
method(count);方法结束,count将值传给method方法,自身并没有变化
sop(count)//结果为1
}

public void method(int count){//这里的count是形式参数,随便是个啥,s/t/sm都行只要符合命名规则
for(count=1;i<10;i++){
   count++;//你在这里输出count看看
}
//还有这里count是9
}
可以好好研究作用域,实参,形参还有局部变量、全局变量的定义及运用
i++先运算后加1,++i先加1后运算,单独存在,没区别

作者: as_heima    时间: 2014-8-8 20:48
i++ 是先使用i的值,然后+1;而++i是使用前先+1 然后再使用其值~这是我的理解~~:)
作者: yueyouqiang    时间: 2014-8-8 21:13
我之前也是经常都忘了声明类型
作者: happymouse    时间: 2014-8-8 21:33
技术贴顶一个,学习了
作者: wisely    时间: 2014-8-8 22:10
扛把子 发表于 2014-8-4 11:28
大括号里面是count=count++;
这时候大家觉得结果是什么呢?

废代码,什么都没做。
作者: 黑马_java猿    时间: 2014-8-8 22:15
说得好!!!
作者: 姜佳文    时间: 2014-8-8 23:05
count++是先使用再+1,你没循环一次count还是个0,++后的count不根本没赋值给count
作者: conglin1991    时间: 2014-8-8 23:52
来学习一下。。。
作者: 忆梦追风    时间: 2014-8-9 22:30
cout1=cout2++是把cout2的值先赋给cout1。然后cout2再自己加一,cout1=++cout2是先cout2自己加一,再把加过1的cout2值赋给cout1
作者: 渴望学习    时间: 2014-8-9 22:36
路过~~~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2