你好,我是计算机教育刘老师,很高兴回答你的问题,针对你这个技术问题,我给出如下的详细的解答。
y++和++y的主要区别有两个:
1、y++返回原来的值,++y返回加1后的值
2、y++不能作为左值,而++y可以
我相信大家第一点应该都能理解,我们重点来说一下第二点,就是解释一下什么是左值。
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。
左值是可以放到赋值符号左边的变量。但能否被赋值不是区分左值和右值的一句。
比如,C++的const左值是不可赋值的,而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
inti=0;
int*p2=&(i++);//错误
++i=1;//正确
i++=5;//错误
那么为什么i++不能作为左值,而++i可以,看他们各自的实现一目了然。
C语言对于解决这个问题的解决方案可以归纳为一个很简单的规则:每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是:从左到右一个一个字符的读入,字符一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。这个处理策略有时被称为“贪心法”,或者,更口语化一点,称为“大嘴法”,Kernighan与Ritchie对这个方法的表述如下,“如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个号将包括从该字符之后可能组成一个符号的最长字符串。”
希望我的回答可以帮助到您,谢谢大家的支持!