前言:昨天我的朋友问了我一道C语言题,本来就不是特别深入的了解x++和++x到底有什么区别所以对道题是百思不得其解,经查阅多位大佬的文章终于对x++与++x了如指掌,O(∩_∩)O哈哈~
在这将这几位大佬的文章分享一下:传送门I ------ 传送门II
这道题:下述程序段的输出结果是()
int x=10;
int y=x++;
printf( "%d %d" , (x++,y) , y++);
这道题的输出结果是这样子的:
要理解这道题首先要理解x++的运行
经查阅x++是这样运作的,它是先将进行赋值:(x++) = x; 然后再自加1: x=x+1;
故在这道题中x++的值应该是10,x的值应是11.
然而如果是++x结果就截然不同了,因为++x是这样运作的,它是先自加1:x=x+1; 然后再进行赋值:(x++)=x;
如果这样子的话x++的值应该是11,x的值同样是11.
然后呢这道题还有一个问题为什么输出(x++,y) 的值是11呢?依据传送门II中大佬的解释y++的优先级要高于前面故先进行了y++的运算,这样下来前面应输入的y自然在y++的过程中已经变为11。但是在网上搜这道题的时候还看到了有人这样解释原因说是连续的逗号连接的式子应该从后面进行运算,所以我进行了下面的检验...
这证明了确实是从右向左进行运算的,然后我就又想检验一下这个和y++的优先级有无关系,然后我又进行了下面的检验...
enenen...结果还是让我很欣喜的,事实表明两个优先级相同的y++按照从右向左进行运算,然而排在它们中间的y是最后运算的,所以我试着来总结一下的话,确实是优先级高的先进行运算,当优先级相同时按照从右到左来进行运算。
好啦,这是我的第二篇博客,但是我认为是我第一篇真真正正用心写的博客,还是很有成就感啦,去吃午饭啦~~~