c语言中i++与++i到底有啥区别
结论: i++
比 ++i
在需要代表的语义相同情况的场景下性能要差一点
原因:
i++
翻译成汇编就是先将i
的值取出, 返回i
的值, 到寄存器,执行i+1
的操作, 之后将结果在写回i
的地址,
++i
则是直接将i
的地址中数据加1, 之后再返回值, 这时的值是i+1
如果i++
与++i
执行的操作语义对与i来说都可以的话, 即不论是否先执行+1
都可以的话, 那么优先使用++i
但是在其他语义不同的使用场景则需要区别对待:
比如:
*p++
是取p所指向的值, 之后对p指针执行+1操作
*++p
则是先执行p指针+1, 再取p+1地址的值
(*p)++
则是取p地址指向的值,之后对值执行+1计算
同理对于i--
和--i
也是适用的.
其实i++
相当于 i=i+1
是一个表达式. 具有左值和右值.