C++指標,變數,地址
指標是C和C++的重點,也是後面學習資料結構的基礎,因此深刻理解指標的概念很重要。但是指標的概念比較抽象,難於理解,而且一些複雜的程式中都是離不開指標的,如果不能理解指標,那麼就不能理解較為複雜的程式了,作者結合了自己學習C++的經驗,對指標,指標變數,地址作如下闡述。
1.什麼是指標:
程式中最離不開的就是變數,而變數相當於是一個容器,是用來存放資料的,變數是存放在記憶體中的。在C++ 中定義變數的形式是: 資料型別 + 變數名,這裡的變數名實際上是一個符號地址,在程式編譯時,作業系統將為每個變數在記憶體中分配記憶體,所以每個變數都有一個在記憶體中的地址,即實體地址
2.指標變數的概念:
從上面我們可以看到,每個變數都有一個符號地址(變數名)和實體地址(在記憶體中的位置,又叫做指標)。變數是可以儲存資料的,但是指標變數與普通變數不同,它用來存放普通變數的地址,即指標變數是用來存放普通變數的指標。要知道,指標變數也是一個變數,在記憶體中也是佔記憶體的,只不過它不存放基本型別資料,而是存放其他基本型別變數的地址。既然指標變數也有自己的實體地址,那麼指標變數的地址用什麼來儲存呢?用比該指標型別高一級的指標變數來存放指標變數的地址,如二級指標變數存放一級指標變數的地址,三級指標變數存放二級變數的地址,依次類推。
3.總結:
牢記三句話:
指標就是地址,地址就是指標;指標變數是一個變數,它儲存了基本型別變數的地址。
如果指標變數p儲存了變數a的地址,那麼稱作p指向了a,*p 就是變數a。
如果p是一個指標變數,*p 表示了以 p 的內容為地址的變數,就是p指向的變數。
4.舉例如下:
int a ; //定義int型別變數
int *p = &a; //變數 p 是一個 int* 型別的一級指標變數,&是取地址符,p儲存了a 的地址
cout << *p <<endl; //輸出 p 指向變數的值,即輸出a的值
cout << p << endl; //輸出 p 的值,即輸出變數a在記憶體中的地址
int **q; //定義二級指標變數
q = &p; // 二級指標變數q儲存了一級指標變數p的地址
cout << q <<endl; //輸出指標變數p在記憶體中的地址
cout << *q << endl; //輸出q指向變數的值,即變數p的值,即a的地址
cout << **q << endl; //可以這樣理解 cout<<*(*q), 等價於 cout <<*p, 即輸出a的值
指標操作自定義變數: