在c/c++中,二級指標是個非常重要的東西,每次用我都小心翼翼,現稍微總結一下。
指標變數首先是乙個變數。而變數有兩個屬性:
a. 變數所在的位址addr
b. 變數的值
然後在c/c++中, &
符號的功能是對變數取位址,也就是說這個符號的返回值是當前變數的位址。
*符號後面如果是指標變數
,那麼就是取該指標變數指向的位址的值。
指標這個變數的值就是所指向那塊區域的位址
先看看一級指標
int*ptr;
inta = 9;
ptr= &a; 變數
變數所在的位址
變數的值
ptr0x00004567
0x0000abcd a
0x0000abcd 9
如上所示:
a 變數的值是9,但是a的位址是0x0000abcd
現在ptr=&a,即ptr->a;意思就是讓ptr指向這塊區域,那麼ptr這個變數的值就是她所指向的區域的位址,也就是a的位址0x0000abcd。
但是這個指標ptr的位置,我們假設系統分配的是0x00004567。
因此,指標變數ptr的位址是0x00004567,裡面存放的值是0x0000abcd。
再來看二級指標:
int**ptr1;
int*ptr;
inta = 9;
ptr= &a;
ptr1= &ptr; 變數
變數所在的位址
變數的值
ptr1
0x00001234
0x00004567
ptr0x00004567
0x0000abcd a
0x0000abcd 9
ptr= &a;
ptr1= &ptr;
這兩句的意思是ptr1->ptr->a
現在ptr=&a,即ptr->a;意思就是讓ptr指向這塊區域,那麼ptr這個變數的值就是她所指向的區域的位址,也就是a的位址0x0000abcd。
然後ptr1=&ptr,意思就是讓ptr1這個變數的值是ptr的位址,我們假設是0x00004567
因此,指標變數
ptr的位址是0x00004567,裡面存放的值是0x0000abcd。
指標變數
ptr1
的位址是0x00001234,裡面存放的值是0x00004567
**ptr1分兩步,*ptr1就是取出ptr1變數所指向的區域的值,即0x0000abcd,然後*(0x0000abcd)就是取0x0000abcd的值,即9。
具體**如下:
C C 中二級指標的理解
以前在學習資料結構的時候一直沒弄懂函式引數裡面傳遞 p 以及使用 的含義,這裡摘抄了一小段文章方便理解。不懂的時候再看看這幾段 指標引數是如何傳遞記憶體的?如果函式的引數是乙個指標,不要指望用該指標去申請動態記憶體。見如下例子 void getmemory char ip,int num ip ch...
指標與二級指標
int num 10 int p1 int p2 p1 指標的指向結構如下圖所示 0x4000 0x3000 p2 0x2000 p1 num p2 表示的是儲存p2指標的位址 p2 表示的是p2指向的位址,即指標p1存放的位址 p2 表示指標p2指向位址中所存的值,即指標p1指向的位址,即變數nu...
一級指標二級指標
例如 int p null int代表指標p指向的資料型別是int型,代表這是乙個指標變數,1 指標變數儲存的內容是指向的變數的位址 2 在使用sizeof判斷指標的位元組數時,在32位機器上為4個位元組,在64位機器上為了相容,仍然是四個位元組大小 3 小知識點,不同型別的指標除了指向的變數資料型...