C进入汇编语言指令/C 指针初始化的金科玉律
叙述二点:
1、P和在选编中*p
2、相关指针初始化的金科玉律
int* p;
p与*p,大概每个人都在这里感到困惑,最后在死记硬背中写下了他的区别,但事实上,没有亲自去内存,在这里,带你去内存,到选择,看看p和*p的原始面孔。
简单的程序流程:
#include
using namespace std;
int main()
{
int i = 1;
int* p=&i;
}
首先看汇编指令分析:
如果你不明白为什么[ebp-4][ebp-8]函数公式的第一和第二个静态变量存储在处,你可以先读文章《C 反汇编代码分析–函数调用 》)
看到很多人问 表针p偏向于一个详细的地址,那么表针p有自己的详细地址吗?当然,通过以上分析可以看出 p的位置是0012ff40,这个详细的地址存储在自变量i地址。当然,通过以上分析可以看出 p的位置是0012ff40,这个详细的地址是自变量i地址。除此之外,还有另一种输出方法可以查询p自己的地址,int*(*q)=&p;q存储的是p地址,可以自己导出查看。
然后从以下操作内存认证是否真的如下:
P的位置是0012ff40,可以在运行内存观察器中看到,如下图所示:
最后一个小认证,呵呵呵,直接从自变量监控器上看(其实是最简单的):
Ok,认识他们,呵呵呵。在教学C 表针时,很多人云里雾里,一会儿详细地址一会儿系数,老师说什么,我们就背什么,最多就是导出看看。在教学C 表针时,很多人都很困惑,详细的地址和系数,老师说什么,我们会背诵什么,最多是导出看。他们有强烈的知识欲望,一切都喜欢追根究底,当时最想打开操作内存,看看是否是这样,但当时我不会,特别委屈的感觉。假如你和我一样,看看,好吧,哈哈哈。事实上,我个人觉得理解表针还是很有用的,特别是在学习训练中与安全有关的东西。
2、表针的复位
只说一点,关于使用表针的金科玉律:在使用表针消除引入操作符(*)之前,一定要对指针进行初始化,以确立一个适度的详细地址。
它仍然是一个简单的微信小程序:
#include
using namespace std;
void main()
{
int i = 1;
int* p;
//int*p = &i;
*p=1;
}
//总共有两种情况,一个是之前给表针一个建立的、适度的详细地址,然后取值1,一个是不立即取值1