none
i,j,k的运行结果和你想的一样吗? RRS feed

  • 问题

  • #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
    	int i,j,k;
    
    	i = 9;
    	j = 9;
    	k = 9;
    	printf("i=%d,++i=%d,++i=%d\n",i,++i,++i);
    	printf("j=%d,j++=%d,j++=%d\n",j,j++,j++);
    	printf("k=%d\n",k);
    	printf("++k=%d\n",++k);
    	printf("++k=%d\n",++k);
    	system("pause");
    	return 0;
    }
    


    煮酒论英雄
    2011年11月23日 15:49

答案

  • printf是C函数,参数是函数栈外压栈的。循序从右至左,所以我觉得j和k没什么好解释的。至于i,感觉上应该是

    //i=11,++i=11,++i=10

    但结果是//i=11,++i=11,++i=11。 这个是由于编译器对于sequence point处理方式不一样。

    就像i=i++;我记得在VS中也是不符合标准的。

    所以不要挑战编译器的sequence point。尽量每条语句只表示一个含义。


    麻烦把正确答案设为解答。
    2011年11月25日 3:48
    版主

全部回复

  • #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
    	int i,j,k;
    
    	i = 9;
    	j = 9;
    	k = 9;
    	printf("i=%d,++i=%d,++i=%d\n",i,++i,++i);
    	printf("j=%d,j++=%d,j++=%d\n",j,j++,j++);
    	printf("k=%d\n",k);
    	printf("++k=%d\n",++k);
    	printf("++k=%d\n",++k);
    	system("pause");
    	return 0;
    }
    


    煮酒论英雄

    运行结果:
    //i=11,++i=11,++i=11
    //j=11,j++=10,j++=9
    //k=9
    //++k=10
    //++k=11
    //请按任意键继续. . .
    煮酒论英雄
    2011年11月23日 15:49
  • 仙人球球你好!

    ++i,是先加一后赋值。执行 p=++i; 相当于:i=i+1;p=i;

    j++,是先赋值后加一,执行p=j++; 相当于: p=j;j=j+1;

    所以虽然 i 和 j 的初始值相同,p 最后的结果是不一样的。

    我在VS 2010 Ultimate 的 win32 console application中测试了你的代码。

    结果如下所示:

    i=11,++i=11,++i=11
    
    j=9,j++=9,j++=9
    
    k=9
    
    ++k=10
    
    ++k=11
    
    Press any key to continue . . .
    

    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us
    2011年11月25日 3:26
  • printf是C函数,参数是函数栈外压栈的。循序从右至左,所以我觉得j和k没什么好解释的。至于i,感觉上应该是

    //i=11,++i=11,++i=10

    但结果是//i=11,++i=11,++i=11。 这个是由于编译器对于sequence point处理方式不一样。

    就像i=i++;我记得在VS中也是不符合标准的。

    所以不要挑战编译器的sequence point。尽量每条语句只表示一个含义。


    麻烦把正确答案设为解答。
    2011年11月25日 3:48
    版主
  • 哦 谢谢你 你说的就是我想知道的 非常感谢


    煮酒论英雄
    2011年11月27日 2:40
  • ++i 和 i++ 的含义我知道 教科书上面将的很明白了 我主要想知道为什么是i=11,++i=11,++i=11

    煮酒论英雄
    2011年11月27日 2:41