C中的” 变量++”与” ++变量”的运算顺序,以及其在函数中的运算顺序(如:printf()中

作者在 2010-03-01 15:22:35 发布以下内容

C中的变量++”” ++变量的运算顺序,以及其在函数中的运算顺序;

小结:我现在用的机器C中的运算是自右向左进行的;a++++a的运算也是不同,a++是先用a原来的值进行运算而后再执行a=a+1的运算,即运算过程中带入的是a的原值也就是在执行a=a+1运算之前的数值;而++a则是先进行a=a+1的运算之后再用a+1后的值进行运算;即带入的是a的新值(a=a+1)。在printf()函数中遇到++aa++则根据C中的运算是自右向左进行的原则++a可以改变a的值而a++则不能在printf()函数中改变a的值。可以认为a++的运算等级最低,是需要在包含a++运算的其他运算都执行完之后才进行a++运算,也就是说在printf()函数中如果包含a++运算则在执行完printf()内除a++之外所有的函数其中包括printf()这个函数之后再进行a++运算。下边的程序就很好的诠释了C中的函数运算时自右向左进行的同时也说明了a++的运算级别是最低的。

注:运算是自右向左还是自左向右这个要看具体的使用设备,设备不同运算顺序也就不同。

#include "stdio.h"

#include <conio.h>

void main()

{

  int a=5,b=5,c=0;

  printf("a=%d\nb=%d\n",a,b);

  printf("a=%d, ++a=%d, a=%d, a++=%d, a=%d, a(=a+1)=%d, a=%d, ++a=%d, a=%d\n",a,++a,a,a++,a,a=a+1,a,++a,a);  

  getch();

  printf("a=%d\n\n",a);

  printf("b++=%d,  b=%d,  b++=%d,  b=%d\n",b++,b,b++,b);

  printf("b=%d\n",b);

  getch();

  a=b=5;

  c=(a++)+(b++);

  printf("\nc=%d\na=%d,b=%d\n",c,a,b);

  getch();

}

------------------运算结果如下:----------------

a=5

b=5

a=8, ++a=8, a=7, a++=7, a=7, a(=a+1)=7, a=6, ++a=6, a=5    //由此输出结果可以看出函数运算是自右向左。最右边

a输出的是5,最左边的a输出的是8

a=9         //此时输出的a值为包含了printf()a++的所有运算执行完之后的值。

b++=5,  b=5,  b++=5,  b=5     //b的初值为5,在printf()函数执行过程中b++没有执行一次,所以输出都为5

b=7    //但是b++运算并没有被省略,在printf()函数后我们在输出一次b的值从中我们可以清楚的看到b++的运

算是安排在所有的函数运算完之后进行的。

c=10   //可见在c=(a++)+(b++)中真正运算的是c=a+b , a++b++在执行完c=a+b之后再进行的,要不就是c=12

了。

a=6,b=6 //这个证明a++b++在执行完c=a+b之后再进行。即在变量名后的”++”运算等级是最低的。

这里的东西其实不重要的。

-----------------------------------------------------------------------------------------

大家可以思考一下下边这个函数的运算结果(前提是你的设备的运算顺序是自右向左的) :

#include <stdio.h>
#include <conio.h>  

  main()  

  {   
      int   i,x,y;   
      x=3;   
      y=3;   
      i=(x++)+(x++)+(x++);   
      printf("\n%d,%d",x,i);   
      printf("\n%d,%d\n",y,(y++)+(y++)+(y++));   
      getch();

  }  


默认分类 | 阅读 1749 次
文章评论,共4条
奋斗的懒虫
2010-03-04 20:45
1
int a=5,<br />
printf(&quot;a=%d,++a=%d,a=%d,a++=%d,a=%d\n&quot;,a,++a,a,a++,a);<br />
结果为什么是6 6 5 5 5??中间的a为什么为5而不是6
liqiangzk982(作者)
2010-03-04 20:57
2
a++的那个'++'的运算是要在整个printf()函数运算完之后在进行的。<br />
在变量名后的”++”运算等级是最低的。(具体要看你用的设备的运算顺序)
奋斗的懒虫
2010-03-04 21:09
3
明白了,谢谢
杨美玲
2010-03-19 08:45
4
呵呵。我才学C语言。不懂o(︶︿︶)o 唉
游客请输入验证码