【C语言学习疑难杂症】第12期:如何从汇编角度深入理解y = (*--p)++这行代码(易懂版)
2023-12-26 23:53:22
对于如下代码,思考一下输出结果是什么?
int a[] = {5, 8, 7, 6, 2, 7, 3};
int y, *p = &a[1];
y = (*--p)++;
printf("%d ",y);
printf("%d",a[0]);
这个代码看似简单,但是在“y = (*--p)++;”这行代码里,编译器做了很多工作。
我们在vs2022的环境下,反汇编得到下面的x86汇编代码:
00E2196F mov eax,dword ptr [p]
00E21972 sub eax,4
00E21975 mov dword ptr [p],eax
00E21978 mov ecx,dword ptr [p]
00E2197B mov edx,dword ptr [ecx]
00E2197D mov dword ptr [y],edx
00E21980 mov eax,dword ptr [p]
00E21983 mov ecx,dword ptr [eax]
00E21985 add ecx,1
00E21988 mov edx,dword ptr [p]
00E2198B mov dword ptr [edx],ecx
前6行就不讨论了,简单的说就是它把指针往前移动一个位置,然后解引用把里面的值赋值给y。
但是后面的部分,也就是从第7行开始,我们需要重点理解。
mo
文章来源:https://blog.csdn.net/lws123253/article/details/135232742
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!