指針,地址,指針變量之間的區別和聯繫

指針是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的值

源地址:http://blog.163.com/zzx_1314/blog/static/257343047201601211105684/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章