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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 代臣 于 2011-12-28 17:11 编辑

我在论坛上看到的问题,看来别人的解答还是很疑惑:
这是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);
        }
}
请朋友们给予有说服力的解释,谢谢。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

9 个回复

倒序浏览
杨旭 黑马帝 2011-12-24 14:06:24
沙发
本帖最后由 杨旭 于 2011-12-24 14:12 编辑

C不懂,只能回答Java部分
如果LZ想到达到你的目的 请看下面的代码
  1.           int i = 0;
  2.           for (; i < 3; )
  3.           {
  4.                   i = i ++;
  5.           }
  6.           System.out.println(i);
  7.          
复制代码
回复 使用道具 举报
杨强 黑马帝 2011-12-24 14:08:57
藤椅
java中 j=j++; 这样的赋值语句等于废话 j++先用j后++ 一直是0赋给0
要想j自增 直接j++;
或者j+=1;

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 周吉明 于 2011-12-24 19:28 编辑

j=j++;语句的执行先后是:先执行 j=j 赋值,再执行 j++ 自增语句。此时 j=j++;中,= 左边的 j 等于0,= 右边的 j 等于1;
同一个表达式里面对 j 执行了两次赋值运算 (= 和++), 这样的结果是不确定的。C语言认为 j=1 而进入下一个循环;java语言认为 j=0 而进入下一循环。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 blackbansy 于 2011-12-25 01:42 编辑

这道题只能理解为每种语言的计算方法不一样了。同样的问题也困惑我了很久,是一道C语言题来的。
#include<stdio.h>
void main()
{
int x,y,b1,b2;
x=y=1;
b1=(x++)+(x++)+(x++);
b2=(++y)+(++y)+(++y);
printf("b1=%d\nb2=%d\n",b1,b2);
}

运行结果:b1=3,b2=10;
对于++问题,曾经想过是编译器的问题,当然也认为时一个语言漏洞。暂时不要看得太重。
(技术分欠缺中。。。)

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
代臣 黑马帝 2011-12-28 17:09:33
地板
周吉明 发表于 2011-12-24 19:26
j=j++;语句的执行先后是:先执行 j=j 赋值,再执行 j++ 自增语句。此时 j=j++;中,= 左边的 j 等于0,= 右 ...

谢评论!
回复 使用道具 举报
代臣 黑马帝 2011-12-28 17:10:00
7#
周吉明 发表于 2011-12-24 19:26
j=j++;语句的执行先后是:先执行 j=j 赋值,再执行 j++ 自增语句。此时 j=j++;中,= 左边的 j 等于0,= 右 ...

谢评论!
回复 使用道具 举报
代臣 黑马帝 2011-12-28 17:10:21
8#
周吉明 发表于 2011-12-24 19:26
j=j++;语句的执行先后是:先执行 j=j 赋值,再执行 j++ 自增语句。此时 j=j++;中,= 左边的 j 等于0,= 右 ...

谢评论!
回复 使用道具 举报
代臣 黑马帝 2011-12-28 17:10:46
9#
周吉明 发表于 2011-12-24 19:26
j=j++;语句的执行先后是:先执行 j=j 赋值,再执行 j++ 自增语句。此时 j=j++;中,= 左边的 j 等于0,= 右 ...

谢评论!
回复 使用道具 举报
周吉明 黑马帝 2011-12-28 17:55:11
10#
代臣 发表于 2011-12-28 17:10
谢评论!

:L 哥们你要是版主就好了,回答一个问题加四次分:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马