一、概念
在如下的a指向b、b指向c的指向關係中:
首先c是」一段內容」,比如你用malloc或者new分配了一塊記憶體,然後塞進去」一段內容」,那就是c了。c的起始位址是0x00000008。
b是乙個指標變數,其中存放著c的位址,但是b也要佔空間的啊,所以b也有位址,b的起始位址是0x00000004,但是b記憶體中存放的是c的位址,所以b裡面的內容就是0x00000008。
那麼到此為止都比較好理解:
[cpp]view plain
copy
?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
?*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,...