A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我在论坛上看到的问题,看来别人的解答还是很疑惑:
这是C语言的代码,运行结果为3:
# include <stdio.h>

int main(void)
{
        int j = 0;
        for (int i = 0; i < 3; i ++)
        {
                j = j ++;
        }
        printf("j = %d\n",j);

        return 0;
}
这是java的代码,运行结果为0:
public class Test
{        
        public static void main(String [] args)
        {
                int j = 0;
                for (int i = 0; i < 3; i ++)
                {
                        j = j ++;
                }
                System.out.println(j);
        }
}
请朋友们给予有说服力的解释,谢谢。

4 个回复

倒序浏览
你的C语言的代码能成功编译吗?  变量 i  应该放到外边定义  

还有main函数设返回值纯属多余
回复 使用道具 举报
代臣 黑马帝 2011-12-28 16:38:59
藤椅
流氓l老醯 发表于 2011-12-27 22:15
你的C语言的代码能成功编译吗?  变量 i  应该放到外边定义  

还有main函数设返回值纯属多余 ...

不知道你运行过没有,编译能通过,而且运行很多遍了结果都是一样的。还有变量可以定义在for()的括号中,跟定义在外面一样的结果。main()函数设置返回值不多余,这是程序规范,我相信出去工作也最好是写上为好,谢谢评论。
回复 使用道具 举报
主要问题出现在这行代码:j=j++;
这个是因为j=j++;这句代码的含义是:将右边的j(此时等于0)赋值给等号左边的j,然后右边的j才自增1。你应该要把这样代码改为:j=++j;这句的含义是:将右边的j自增1(此时右边的j的值是1),然后赋值给左边的j。将++这个符号放在变量的左边和右边时是有区别的。当变量要参与其他运算时要想好,保险的方法是:j+1;,当不用参与其他的运算时,j++;和++j;的效果是一样的。
回复 使用道具 举报
我觉得是这样:
在C中,“j=j++;”这句话被翻译成:“j=j;j++;”
而在java中,“j=j++”是这么操作的,先取j的数据到累加器中acc,然后令j=acc(相当于c中的“j=j;”这句话),然后acc增1,因此j中的内容没有变。如果在java中将“j=j++”改成“j=++j”,则将j取到acc中,然后acc加1后再赋值给j,就与C中的结果一样了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马