C++構造資料類型----指標,資料類型----
C++中提供了用基礎資料型別 (Elementary Data Type)構造的構造資料類型來對複雜的資料進行描述與處理。這些構造資料類型包括枚
舉、數組、結構、聯合、指標、引用。 接下來結合我對指標的認識來說說指標。
一、指標的由來
要想瞭解指標,得先看看什麼是地址。
當定義一個變數後,記憶體中將會劃分出一塊若干個儲存單元組成的地區,用於儲存該該變數的的資料 ,所
示,記憶體裡每個儲存單元都有各自的編號,這個編號就叫做地址。 這些地址也是資料,它們存放在哪裡呢? 在
C++裡,提供了指標類型,當一個變數被定義成一個指標類型後,就可以把地址存入這個變數中了。 這樣我們形象
地把這種可以存放記憶體單元地址的變數叫做指標。
二、定義指標
每當儲存一個地址,就得定義一個指標變數。
定義格式為 資料類型 * 變數名(指標名)
資料類型是指標指向記憶體單元中的資料的類型, *是一個表示符號。
三、怎麼使用
1、初始化
定義指標後,只是得到了一個能儲存地址的指標,它裡面存放的是一個隨機數,所以在使用指標前,必須將其初
始化。
2、賦值
賦值格式可以是 資料類型*指標變數名=初始地址運算式;也可以在定義指標後,指標變數名=地址運算式。
需要注意的地方:
(1)指標是存放地址的,不要將非地址常量或變數以及無意義的地址賦給指標變數。
(2)已經初始化的指標可以給同類型的指標賦值, 類型不一致可以強制轉換。 這個和普通變數賦值的意思差不多。
(3)如果基礎資料型別 (Elementary Data Type)的變數、數組等可以用& 擷取自身地址,賦值給相同類型的指標。
三、指標應用
1、與字串關係
字元型指標用於存放字元型變數的地址。
一個字元型指標儲存了字串的第一個字元的地址,由於這個指標指向了字串首地址,所以其他字元的地址我
們也就可以知道了。
從下面這個例子來看看指標和字串的關係:
Char *P_str="abcd" ,指標中存放的是字元'a' 在記憶體中的地址。
2、與數組關係
指標數組
數組中可以存放字串,數字等元素, 當把指標存到數組中時,這個數組就成了指標數組。
基本形式為 類型名* 數組名[ 下標運算式] 例如:int * p_a[5]
數組指標
數組也是有地址的,指標中存放的是數組地址時,這個指標就成了數組指標。
基本形式為 類型名(* 指標名)[下標運算式] 例如:int * a_p[5]
4、與函數關係
作為函數參數
在這裡,指標作為函數參數是按地址傳遞資料。 當作為函數形參時,指標指向記憶體中的資料直接成了函數的參數。
指標型函數
有返回值的函數可以返回一個值, 當這個函數被定義返回值類型為指標型時,返回的值是一個地址。 這時這個
函數名就是指標名,我們稱這樣的函數為指標型函數。
指向函數的指標
函數名是函數在記憶體中的起始地址,調用函數時,就是根據函數名找到函數在記憶體中的地址,然後執行函數。 這
時,如果指標中存放的是函數的首地址,那麼就這個指標就是指向函數的指標了。
5、與常量關係
指標常量
指標名前被const修飾,這時指標中存放的地址就成了一個不可修改的常量。
常量指標
當const加在資料類型前,這時指標指向的記憶體單元的內容不可以修改。 但可以修改指標中存放的地址。
常指標常量
當資料類型前和指標名前都加const後, 很顯然,以上兩個合并一下,既不能修改指標中存放的地址,也不能修改指標指向的記憶體單元中的內容。
四、小結
指標這一塊的內容我總結的還不是很全面,還有很多東西沒有在這裡寫,指標在C++程式中扮演著非常重要重要的角色,如果不能深刻理解指標,學習C++是很困難的,是很容易產生困惑的。我也是初學,可能有些地方理解的不對,還望大家斧正。 也歡迎大家和我交流關於指標中的問題!