二級指標的作用詳解

2021-08-15 05:28:13 字數 2387 閱讀 2154

一、概念

在如下的a指向b、b指向c的指向關係中:

首先c是」一段內容」,比如你用malloc或者new分配了一塊記憶體,然後塞進去」一段內容」,那就是c了。c的起始位址是0x00000008。

b是乙個指標變數,其中存放著c的位址,但是b也要佔空間的啊,所以b也有位址,b的起始位址是0x00000004,但是b記憶體中存放的是c的位址,所以b裡面的內容就是0x00000008。

那麼到此為止都比較好理解:

[cpp]view plain

copy

print

?b= 0x00000008;  //b的內容 

*b = 」一段內容」;  //b解引用,也就是b指標指向的c的值

&b = 0x00000004;  //b取位址,b的位址是0x00000004

b= 0x00000008;  //b的內容 

*b = "一段內容"; //b解引用,也就是b指標指向的c的值

&b = 0x00000004; //b取位址,b的位址是0x00000004

那麼,再來看a:

a是二級指標變數,其中存放著b的位址0x00000004,a也有位址,是0x00000000;

[cpp]view plain

copy

print

?*a = b= 0x00000008;  //a解引用也就是b的內容 

**a = *b = 」一段內容」;  //b解引用,也就是b指標指向的c的值

a = &b = 0x00000004;  //a存的是b的位址,b的位址是0x00000004

&a = 0x00000000;  //a取位址

*a = b= 0x00000008;  //a解引用也就是b的內容 

**a = *b = "一段內容"; //b解引用,也就是b指標指向的c的值

a = &b = 0x00000004; //a存的是b的位址,b的位址是0x00000004

&a = 0x00000000; //a取位址

二、使用

二級指標作為函式引數的作用:在函式外部定義乙個指標p,在函式內給指標賦值,函式結束後對指標p生效,那麼我們就需要二級指標。

看看下面一段**:有兩個變數a,b,指標q,q指向a,我們想讓q指向b,在函式裡面實現。

1.先看看一級指標的實現

[cpp]view plain

copy

print

?#include

using

namespace std;  

int a= 10;  

int b = 100;  

int *q;  

void func(int *p)  

int main()    

#includeusing namespace std;

int a= 10;

int b = 100;

int *q;

void func(int *p)

int main()    

#includeusing namespace std;

int a= 10;

int b = 100;

int *q;

void func(int **p) //2

void  main()    

void my_malloc(char **s)

void main()

這裡給指標p分配記憶體,do something,然後free(p),如果用一級指標,那麼就相當於給乙個p的拷貝s分配記憶體,p依然沒分配記憶體,用二級指標之後,才對p分配了記憶體。

作為函式引數的二級指標的圖示

二級指標的作用詳解

一 概念 在如下的a指向b b指向c的指向關係中 首先c是 一段內容 比如你用malloc或者new分配了一塊記憶體,然後塞進去 一段內容 那就是c了。c的起始位址是0x00000008。b是乙個指標變數,其中存放著c的位址,但是b也要佔空間的啊,所以b也有位址,b的起始位址是0x00000004,...

二級指標的作用詳解

原文 一 概念 在如下的a指向b b指向c的指向關係中 首先c是 一段內容 比如你用malloc或者new分配了一塊記憶體,然後塞進去 一段內容 那就是c了。c的起始位址是0x00000008。b是乙個指標變數,其中存放著c的位址,但是b也要佔空間的啊,所以b也有位址,b的起始位址是0x000000...

二級指標的作用詳解

一 概念 在如下的a指向b b指向c的指向關係中 首先c是 一段內容 比如你用malloc或者new分配了一塊記憶體,然後塞進去 一段內容 那就是c了。c的起始位址是0x00000008。b是乙個指標變數,其中存放著c的位址,但是b也要佔空間的啊,所以b也有位址,b的起始位址是0x00000004,...