C中的” 变量++”与” ++变量”的运算顺序,以及其在函数中的运算顺序;
小结:我现在用的机器C中的运算是自右向左进行的;a++与++a的运算也是不同,a++是先用a原来的值进行运算而后再执行a=a+1的运算,即运算过程中带入的是a的原值也就是在执行a=a+1运算之前的数值;而++a则是先进行a=a+1的运算之后再用a+1后的值进行运算;即带入的是a的新值(a=a+1)。在printf()函数中遇到++a和a++则根据C中的运算是自右向左进行的原则++a可以改变a的值而a++则不能在printf()函数中改变a的值。可以认为a++的运算等级最低,是需要在包含a++运算的其他运算都执行完之后才进行a++运算,也就是说在printf()函数中如果包含a++运算则在执行完printf()内除a++之外所有的函数其中包括printf()这个函数之后再进行a++运算。下边的程序就很好的诠释了C中的函数运算时自右向左进行的同时也说明了a++的运算级别是最低的。
注:运算是自右向左还是自左向右这个要看具体的使用设备,设备不同运算顺序也就不同。
#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之后再进行。即在变量名后的”++”运算等级是最低的。
这里的东西其实不重要的。
-----------------------------------------------------------------------------------------
大家可以思考一下下边这个函数的运算结果(前提是你的设备的运算顺序是自右向左的) :
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();
}