c++中提供了用基本資料型別構造的構造資料型別來對複雜的資料進行描述與處理。這些構造資料型別包括枚
舉、陣列、結構、聯合、指標、引用。 接下來結合我對指標的認識來說說指標。
一、指標的由來
當定義乙個變數後,記憶體中將會劃分出一塊若干個儲存單元組成的區域,用於儲存該該變數的的資料 ,如圖所
示,記憶體裡每個儲存單元都有各自的編號,這個編號就叫做位址。 這些位址也是資料,它們存放在**呢? 在
c++裡,提供了指標型別,當乙個變數被定義成乙個指標型別後,就可以把位址存入這個變數中了。 這樣我們形象
地把這種可以存放記憶體單元位址的變數叫做指標。
二、定義指標
每當儲存乙個位址,就得定義乙個指標變數。
定義格式為資料型別 * 變數名(指標名)
資料型別是指標指向記憶體單元中的資料的型別,
*是乙個表示符號。
三、怎麼使用
1、初始化
定義指標後,只是得到了乙個能儲存位址的指標,它裡面存放的是乙個隨機數,所以在使用指標前,必須將其初
始化。
2、賦值
賦值格式可以是資料型別*指標變數名=初始位址表示式;
也可以在定義指標後,指標變數名=位址表示式。
需要注意的地方:
(1)指標是存放位址的,不要將非位址常量或變數以及無意義的位址賦給指標變數。
(2)已經初始化的指標可以給同型別的指標賦值, 型別不一致可以強制轉換。 這個和普通變數賦值的意思差不多。
(3)如果基本資料型別的變數、陣列等可以用& 獲取自身位址,賦值給相同型別的指標。
三、指標應用
1、與字串關係
字元型指標用於存放字元型變數的位址。
乙個字元型指標儲存了字串的第乙個字元的位址,由於這個指標指向了字串首位址,所以其他字元的位址我
們也就可以知道了。
從下面這個例子來看看指標和字串的關係:
char *p_str="abcd" ,指標中存放的是字元'a' 在記憶體中的位址。
2、與陣列關係
指標陣列
陣列中可以存放字串,數字等元素, 當把指標存到陣列中時,這個陣列就成了指標陣列。
基本形式為型別名* 陣列名[ 下標表示式] 例如:int * p_a[5]
陣列指標
陣列也是有位址的,指標中存放的是陣列位址時,這個指標就成了陣列指標。
基本形式為型別名(* 指標名)[下標表示式] 例如:int * a_p[5]
4、與函式關係
作為函式引數
在這裡,指標作為函式引數是按位址傳遞資料。 當作為函式形參時,指標指向記憶體中的資料直接成了函式的引數。
指標型函式
有返回值的函式可以返回乙個值, 當這個函式被定義返回值型別為指標型時,返回的值是乙個位址。 這時這個 函式
名就是指標名,我們稱這樣的函式為指標型函式。
指向函式的指標
函式名是函式在記憶體中的起始位址,呼叫函式時,就是根據函式名找到函式在記憶體中的位址,然後執行函式。 這
時,如果指標中存放的是函式的首位址,那麼就這個指標就是指向函式的指標了。
5、與常量關係
指標常量
指標名前被const修飾,這時指標中存放的位址就成了乙個不可修改的常量。
常量指標
當const加在資料型別前,這時指標指向的記憶體單元的內容不可以修改。 但可以修改指標中存放的位址。
常指標常量
當資料型別前和指標名前都加const後, 很顯然,以上兩個合併一下,既不能修改指標中存放的位址,也不能修改指標指向的記憶體單元中的內容。
四、小結
C 構造資料型別 引用
提及引用,我想起了小時候夥伴們互相起外號,同學們的外號有時特別生動形象,每當提及都忍俊不禁。自從給 某人起了乙個有特色的外號後,他的名字就被取締了。時間長了,只要叫某同學的外號,他便答應了。知識源於生活,在c 中也出現了的外號,它沒有人的外號那麼幽默,但是很雅緻,叫做引用。引用在程式設計中 很實用,...
c語言構造資料型別
1.typedef 給老的資料型別取別名 可以簡寫複雜的資料型別 typedef unsigned int ui typedef int pint pint是個型別,int 的新名字 typedef int pfunc int int pfunc是個型別,表示函式指標型別 int add int a...
c語言 資料型別 構造型別
利用計算機存處理單一的資料是比較容易,比如乙個人的某一科成績,直接建立乙個變數儲存相應的分數就可以了,但是要同時處理多個科目的時候,這時候就有點麻煩了,同時建立多個變數儲存多個科目這樣子顯得有點奇怪不是麼?假設乙個人有5個科目的成績要儲存,乙個班50個人就得要有250個變數來儲存分數,光乙個班級就得...