前面雞啄米講的是數組,從這一講開始講指針的概念及相關知識。學過C語言的應該對指針不陌生了,但是指針在軟件開發中確實是個很重要的元素,建議大家都再好好看看吧。

       C++從C語言繼承了指針的概念。指針繼續為C++軟件開發人員提供編程的方便。可能很多人認為C和C++有指針太麻煩了,而且很容易因為指針的使用出現非法地址訪問的問題,但是雞啄米想說的是,指針給我們帶來的更多的是對數據的操作和組織靈活和方便,至于容易出問題這方面,只要大家細心點,積累些經驗就會很好的利用指針了。編程入門的時候大家先學好打好基礎吧。

       1.內存空間如何訪問

       我們使用的內存的基本存儲單位是字節,一個字節由8個二進制位組成。每個字節都會按照一定的規則編號,這個編號就是該字節存儲單元的地址。計算機就是利用這種編號也就是字節存儲單元的地址來定位內存進行數據讀寫的。

       我們在訪問內存中的數據時,有兩種方式,一種是通過變量名,一種是通過地址。我們聲明的每個變量都是占據內存空間的,前面也講到了,char型占1個字節,float型占4個字節。而內存空間的分配是在什么時候呢?全局變量、static靜態變量等靜態生存期變量在程序開始運行之前就被分配了內存空間,動態生存期的變量是在變量聲明時分配內存空間的,然后變量名也代表了分配的空間。但是有時候沒有變量名可用或者很不方便,例如,在動態內存分配時就沒有變量名可以用,這個雞啄米會在后面講;調用函數傳遞很多參數時,就不可能一個一個的通過變量名傳遞,而是需要用地址傳遞。

       雞啄米給大家形象的說下存儲地址:每個學生住一個宿舍,學生相當于變量,宿舍相當于存儲單元,我們可以用學生的名字來找到他,這就是變量名的方式,也可以通過宿舍號找到他,這就是通過地址訪問的方式。

       C++中的指針類型就是用來存放上面講的內存單元地址的變量類型。

雞啄米:C++編程入門系列之二十七(數組、指針和字符串:指針變量的聲明、地址相關運算--“*”和“&”)

       2.指針變量的聲明

       指針跟int等一樣也是一種數據類型指針類型的變量就是指針變量,指針變量存放的是內存單元的地址。

       以前我們都是通過變量名訪問變量,是一種直接的方式,而通過指針訪問變量是間接的。例如,張三住在哪個宿舍不知道,可以在宿舍名單上第一行看到,那么宿舍名單的第一行就是指針變量,第一行上寫的內容就是指針變量中存放的內容,而張三就是指針所指向的對象值。

       指針同樣是先聲明再使用,聲明的形式是:數據類型 *標識符;。

       我們注意到中間有個“*”,它表示聲明的是一個指針變量。“*”前面的“數據類型”表示的是指針所指向的變量或對象的類型,可以是任意類型,也就是說在聲明的該指針所指向的內存單元中可以存放此數據類型的數據。而指針本身在32位系統上是unsigned long類型的,在64位系統上是unsigned _int64類型的,這里可能大家糊涂了,怎么又出來一個類型?結合上面張三的例子跟大家解釋下,聲明中的“數據類型”指定的是張三的類型,指針本身的類型指的是宿舍名單第一行的類型,清楚了吧。

       例如,int *p;聲明了一個指針變量p,它指向int類型的數據,用來存放int型數據的地址。

       3.地址相關運算--“*”和“&”

      “*”和“&”可能大家已經見過了,作為二元操作符時,“*”表示相乘,“&”表示位運算里的與運算。在上面的指針變量的聲明中,“*”用來表示聲明的是一個指針變量。“&”在變量聲明語句中出現在變量名左邊時表示聲明的是引用。而現在雞啄米要跟大家講的是它們的另外一種用法--地址運算。

      “*”在地址運算中叫做指針運算符,表示指針指向的變量的值,是一元操作符,例如,如果p是一個int型的指針,則*p表示p指向的int型數據的值。“&”在地址運算中叫做取地址運算符,也是一個一元操作符,用來獲取一個對象的地址,例如,有一個變量i,&i就表示變量i的存儲單元地址。

       雞啄米提醒大家注意一下“*”和“&”出現在聲明語句中和在執行語句中意義是不一樣的。

      “*”出現在聲明語句中被聲明的變量名之前時,表示聲明的是指針,例如,int *p;。“*”出現在聲明語句的初值表達式中或者執行語句中時,表示指針指向的對象的內容,例如,int i=*p; cout<<*p;。“&”出現在聲明語句中被聲明的變量名之前時,表示聲明的是引用,例如,int &rf;。“&”出現在聲明語句的初值表達式中或者執行語句中時,表示取對象的地址,例如:

       int x;
       int y;
       int *p1=&x;
       int *p2;
       p2=&y;

       雞啄米今天講了指針的聲明及“*”和“&”的用法,屬于指針方面最基礎的內容,希望大家掌握好。有什么問題在雞啄米博客留言討論。謝謝大家的關注。

 

除非特別注明,雞啄米文章均為原創
轉載請標明本文地址:http://www.cpbsu.com/software/76.html
2011年10月28日
作者:雞啄米 分類:軟件開發 瀏覽: 評論:10