指標是「指向」另外一種型別的復合型別。
與引用類似,指標也實現了對其他物件的間接訪問。
定義指標型別的方法將宣告符寫成*d的形式,其中d是變數名。
若乙個語句中定義了幾個指標變數,每個變數前面都要有宣告符 *
int
*p1,
*p2;
//定義了兩個指向int型物件的指標,p1 p2
double dp,
*dp2;
//定義了指向double型別的指標dp2,定義double型別的變數
指標存放某個物件的位址,要想獲得該位址,需要使用取位址符(&)
int ival =42;
int*p =
&ival;
//p存放變數ival的位址,或p是指向變數ival的指標
**裡定義的變數ival在記憶體裡會有乙個地方存放值42,那麼p儲存的就是42所在的位置。
舉例一下,ival是你女朋友,那麼p其實就是你女朋友家的位址。拿到位址,就可以找到女朋友
這裡只是簡單介紹指標,不考慮特殊情況,指標的型別都要和它所指向的物件嚴格匹配。
double ival;
double
*dp =
&ival;
//dp是指向double型別物件ival的位址
double
&dp2 = pd;
//dp2是指向double型別物件pd的位址
//因為指標pd也是物件,因此可以由指標指向它
int*pi = pd;
//錯誤:int型指標pi試圖指向double型別的指標pd
pi =
&ival;
//錯誤:ival是double型物件,pi是int型
從上面的學習中,我們可以知道,指標實際就是儲存著存放變數的位址,找到位址,就能知道變數的值。
其中,第二種指標,可用於判斷陣列是否到結尾等操作,即當指標指向的位址沒有真實存在的值,可以判斷陣列到結尾了。
如果指標指向了乙個物件,可以使用解引用符(*)來訪問該物件。
int ival =42;
int*p =
&ival;
//p存放ival的位址
cout <<
*p /使用*,獲得p儲存的位址中對應的值
對指標的解引用會得到指標所儲存位址中的值,那麼,如果對解引用的結果賦值,會發生什麼呢?
int ival =42;
int*p =
&ival;
//p存放ival的位址
*p =0;
cout <<
*p << endl;
//此時輸出0,ival的值也變成0
也就是說,修改解引用的結果,就會修改原來指標儲存位址中的值。
空指標不指向任何物件,在使用乙個指標之前,一定要先檢查一下是否為空。
如何生成空指標呢?
int
*p1 =
nullptr
;//c++11新增規範
int*p2 =0;
//初始化為0
int*p3 =
null
;//等價於int *p3 = 0;
nullptr是一種特殊的字面值,它可以被轉換成任意其他的指標型別。
建議:所有指標,最好都初始化。
以上,就是關於指標的一些簡單介紹。
希望對你的學習有所幫助:)
復合型別之指標
指標的含義 指標是 指向 另外一種型別的復合型別。與引用類似,指標也實現了對其他物件的間接訪問。指標和引用的區別 1 指標是乙個物件,允許對指標賦值和拷貝,而且指標在其生命週期內可以先後指向幾個不同的物件 2 指標無需在定義時賦初值。和其他內建型別一樣,在塊作用域內定義的指標如果沒有進行初始化操作,...
C 復合型別之引用和指標
復合型別是指基於其他型別定義的型別。c 有很多復合型別,介紹其中的引用和指標 對變數的宣告的解釋 一條簡單的宣告語句是由乙個資料型別和緊隨其後的變數名列表組成。其實更通用的描述是 一條宣告語句由乙個基本資料型別和緊隨其後的乙個宣告符列表組成。每個宣告符命名了乙個變數並指定該變數是與基本資料型別有關的...
c primer plus復合型別之指標
指標是乙個變數,其儲存的是值的位址,而不是值本身。了解 在討論指標之前,我們先看一看如何找到常規變數的位址,只需對變數應用位址運算子 就可以獲得他的位置,例如 int cups 6 double donuts 4.5 cout cups value 程式輸出 cups value 6 and cup...