1. 程式人生 > >C++指標,變數,地址

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的值

 

 

指標操作自定義變數: