说明一下++p 与 p++ 的区别。

假设这样的一个例子:
“`c
int p = -1;
int y = 0;
y = p++ + ++P;

先分析一下它的汇编代码(没有优化):
```c
subl    $40, %esp ; 分配40字节 
movl    $1, -16(%ebp) ; 存储 p 
movl    $0, -12(%ebp) ; 存储 y 
movl    -16(%ebp), %eax ; 这3步执行 p++ 
leal    1(%eax), %edx 
movl    %edx, -16(%ebp) 
addl    $1, -16(%ebp) ; 这2步执行 ++p 
movl    -16(%ebp), %edx 
addl    %eax, %edx ; 相加操作 
movl    %edx, -12(%ebp) ; 结果写回 y 

可以看出p++需要3步,++p需要2步,而且修改p的值是不一样的,看出++p的效率比p++的高。

另外:

  • 如果只考虑自定义类型的话,两者是没有区别的,但对于自定义类型,如类,i++(右值),创建临时变量,把i的值赋给它,然后返回临时变量。++i对i执行+1后返回i

你可能感兴趣的:(说明一下++p 与 p++ 的区别。)