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
- printf("%d,%d\n", *ptr, *(++ptr))
- printf("%d,%d\n", *ptr, *(ptr++))
- printf("%d\n",*(ptr++))讲解
- int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d",*ptr,*(++ptr));
- printf("%d,%d",*ptr,*(++ptr))的输出语句是从右到左的,所以结果都为,8,8
- printf("%d%d%d%d\n", a,b,c);
- printf("%d,%d\n",*p1,*(++p1));
- printf("%d\n",*p+++*++p);
- printf("%d %d ",n,~n)^10&&main(n+2);
- printf("%d,%d,%d/n",a,++a,a++)
- Smart ptr
- Ptr ReturnHandler
- int * (*ptr)()
- byte ptr
- 理解*ptr++
- shared ptr
- printf("%d %s\n",a,a);
- 关于C语言的printf("%d,%d,%d,%d\n",a,++a,a--,a--);
- property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- Transfer-Encoding详解以及erlang中的实现
- SQL Server 列转行
- android support v7 Toolbar控件
- springMVC 快速入门
- printf("%d,%d\n", *ptr, *(++ptr))
- windows server 2008 R2 显示桌面图标
- Oracle PL/SQL cursor(游标)
- duang什么意思
- 数据库的操作笔记
- Cocos2d策略类塔防精品手游-MiniTD独家完整源码
- 为什么c++中函数指针是16字节
- 简单讨论操作系统的工作机制
- MVC,MVP 和 MVVM 的图示