当前位置:主页 > 行业产品 >

走进内存,走进汇编指令来看CC++指针

发布时间:19-12-06 阅读:988

讲述两点:

1、汇编下的p与*p

2、有关指针初始化的金科玉律

int* p;

p与*p,信托很多人都在这犯过含混,着末在逝世记硬背中记着了他们的差别,但实际如何,也没有亲身到内存中看过,这里,就带您到内存中看看,到汇编中溜溜,看看p与*p的庐山真面貌。

简单的法度榜样:

1#include

2using namespace std;

3int main()

4{

5int i = 1;

6int* p=&i;

7}

先看汇编代码阐发:

(假如您不理解为什么[ebp-4][ebp-8]处寄放的是函数第一和第二个局部变量,您可先涉猎《C++反汇编代码阐发--函数调用 》)

看到很多人问 指针p指向一个地址,那指针p有自己的地址么?谜底是肯定的,经由过程上面的阐发可以看出 p的地址是0012ff40,此地址处寄放的是变量i的地址。除了经由过程这种要领,着实还有一种可输出的要领查看p自己的地址,int*(*q)=& amp;p;则q寄放的便是p的地址,可以自己输出查看一下。

再从内存验证以下是否真的如斯:

我们已经阐发出来p的地址是0012ff40,可以直接在内存察看器中看一下,如图:

着末一个小验证,呵呵,直接在变量监视器中看(着实是最简单的):

Ok,熟识他们了吧,呵呵。在进修C++指针时,很多人都云里雾里的,一下子地址一下子值的,师长教师说是啥,咱就背啥,最多也便是输出看一下。我自己好奇心很强,什么工作都爱好刨根问底,那会儿最想掰开内存看看,到底是不是这样,但那时我不会,特憋屈感到。假如你也跟我一样的话,看那,便是了,呵呵。着实自我感到搞懂指针照样很有用的,分外是在进修跟安然有关的器械。

2、指针的初始化

只讲一点,关于应用指针的金科玉律:必然要在对指针利用解除引用操作符(*)之前,将指针初始化一个确定的、适当的地址。

依然是一个简单的小法度榜样:

1#include

2using namespace std;

3void main()

4{

5int i = 1;

6int* p;

7//int*p = &i;

8*p=1;

9}

//一共两种环境,一种是之前给了指针一个确定的、适当的地址,然后赋值1,一种是没有,直接赋值1

直接看汇编指令:

仅先容指针初始化的这条金科玉律,至于初始化的其他操作,应该没有什么了,翻翻书,很多多少,不再赘述。

参考册本:C++ primer plus Stephen Prata著 孙建树 韦强 译

转自:http://www.cnblogs.com/shitouer/archive/2010/04/11/1709328.html



上一篇:关羽为何要发动襄樊之战?关羽的目的是什么?
下一篇:探索走进农村中小学互动机制 社会大课堂开展“