printf("%d,%d\n", *ptr, *(++ptr))

来源:互联网 发布:王者荣耀延迟高4g网络 编辑:程序博客网 时间:2024/06/01 08:39
#include <cstdio>int main(){int arr[] = { 6, 7, 8, 9, 10 };int *ptr = arr;*(ptr++) += 123;printf("%d,%d\n", *ptr, *(++ptr));return 0;}

程序运行结果 : 8,8

解释:

①*(ptr++) += 123这句代码中,使用了后++

所以效果相当于:

*(ptr) += 123;++ptr;

实际上就是修改了arr[0]的值使其变为129,并ptr指针指向[1]


②printf("%d,%d\n", *ptr, *(++ptr));这句代码的执行涉及到汇编的函数的参数的压栈过程是从后面的参数开始压栈的,所以*(++ptr)会先被压栈,导致++ptr首先生效

所以往栈里压入*ptr时,此时的ptr已经变成指向a[2]了


用OD将程序反汇编得到的汇编代码我加了注释,如下图:



0 0
原创粉丝点击