快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记注册:走进内存,走进汇编指令来看CC++指针



讲述两点:

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++ prim和记注册er plus Stephen Prata著 孙建树 韦强 译

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

您可能还会对下面的文章感兴趣: