i++与++i作左值问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 07:54:07
i++ = {int temp=i;i=i+1;return temp;}//返回临时变量
++i = {i=i+1;return i;}//返回i

在网上搜索看了一下i++与++i作左值问题,以上是网友给的解释(就是i++不能作左值,而++i能作左值)。但是为什么i++就相当于{int temp=i;i=i+1;return temp;},而++i却相当于{i=i+1;return i;}?还有就是为什么i++要设个临时变量,而++i不设临时变量。
哦,看来我自己没把重点说清楚。其实是看了网友对i++不能作左值,而++i能作左值的解释之后,还是不太理解为什么。

因为先返回值,后加,这个过程一般就模拟成,你用的是一个临时值,返回的时候自身已经加过了

这种代码都是不合规则的, 考虑这个没意义

就C语言规则而言这两个都不可以做左值,因为规则说在两个序列点之间一个变量只能被赋值一次, 如果用这个做左值肯定不符合这个规则了。 只不过在实现当中 ++i使用i本身作为返回值,所以做左值也不会报错,但是总之这个结果是不被规则保护的

不是临时变量的问题。。。这个句子是给你解释用的。
i++返回的是“+”之前的值
++i返回的是“+”之后的值。
就这些。完毕。

++i 用i前加1
i++ 用完i之后,i才加1