新物网

当前位置:首页 > 百科

百科

C进入汇编语言指令/C 指针初始化的金科玉律

时间:2023-10-19 19:39:05 静子
叙述二点:1、P和在选编中*p2、相关指针初始化的金科玉律int* p;p与*p,大概每个人都在这里感到困惑,最后在死记硬背中写下了他的区别,但事实上,没有亲自去内存,在这里,带你去内存,到选择,看看p和*p的原始面孔。简单的程序流程:#includ

叙述二点:

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