看下**吧:
int ival = 1024;
int &refval = ival; // 用 & 來表示refval是ival的引用
int &refval2; // 這裡會報錯,因為引用必須初始化
為什麼必須進行初始化呢?因為在定義引用的時候,程式把引用和他的初始值繫結在一起,記住,繫結不是拷貝,也就是說如果你對利用引用修改值,那麼被引用的物件的值也會發生變化。並且,引用一旦繫結之後就不可更改,這也就是為什麼引用必須初始化的原因。
//用**舉個例子吧
int ival = 1024;
int &refval = ival;
refval = 3;
cout《引用的定義
允許在一條語句中定義多個引用,當然,每個引用的標誌符都必須以&開頭:
int i = 1, i2 = 2;//定義兩個普通的int型別
int &j = i, k = i2;//其中j是對i的引用,k是普通的int變數
int &m = i, &n = m;//m是對i的引用,而n是對i的引用的引用,其實就是這個意思,給小李取了乙個外號叫
//李子,然後又給李子取了個外號叫木子
&j = i2;//error:expression is not assignable
指標是指向另外一種型別的復合型別,用來存放物件的位址。和引用相似,指標也實現的對其他物件的簡介訪問。然而指標和引用相比有著許多的不同之處。首先,指標本身就是乙個物件,由宣告符*和變數名組成如:*p。所以指標可以不初始化(但這樣做會出現問題,後面再講,不過編譯器是不會報錯的),因此也允許對齊進行賦值和拷貝。第二,指標所指向的物件可以隨時改變。
int i = 1;
int *p = &i; // 這裡的&是去位址符。不是引用的意思,表示p存放i的位址
int *p1,*p2; // 編譯器不會報錯,因為指標可以不初始化
p1 = p; // p1和p同時指向i
利用指標訪問物件如果指標指向了乙個物件,可以使用解引用符* 來訪問該物件。
可能會有疑惑,如同引用& 和位址&,指標*和解引用*,其實代表不是同樣的東西,只是寫法相同罷了(我就是這麼理解的,具體代表什麼意思看情況而定,應該還是好分辨的)
比如我們要輸出i的值,可以這樣:
cout<<*p《通過解引用符*來獲取p所存的位址的物件的值。
空指標
空指標不指向任何物件,在試圖使用乙個指標之前**可以首先檢查它是否為空。以下列出幾個生成空指標的方法:
int *p = nullptr;//c++11的一種新方法,就是空的意思
int *p1 = 0;//直接初始化為字面常量0
int *p2 = null;//其實和上面等於0時一樣的
其他指標操作
int ival = 11;
int *p1 = &ival;
int *p2 = 0;
if(p1)
{cout<<"p1 is true"《原因就是,如果指標的值是0,條件取false,否則,全部為true。這裡說一下 ,如果是nullptr的話,直接理解空和非空就好了。
void* 指標
void* 是一種特殊的指標型別,用於存放任何物件的位址。但是,我們永遠無法理解該位址的物件是什麼型別的,這也就導致我們無法直接操作void*指標所指的物件,換句話說就是問無法通過void*來訪問記憶體空間中所儲存的物件。
int obj = 2;
double * p2 = 0;
void* p3 = &obj;
p3 = p2;
指向指標的指標先說一下變數吧,變數的定義包括乙個基本的資料型別和一組宣告符(比如 int *p , int是資料型別,*是宣告符中的修飾符,p是名字)。並且宣告符中的修飾符的個數並沒有限制。如下:
int ival = 22;
int *p = &ival; //p指向ival
int **pp = &p; //pp 指向乙個int形的指標
int ***ppp = &pp; //ppp 指向乙個指向int型的指標的指標
如果想輸出ival的話也有很多方法:
cout<<*p《指向指標的引用
上面也說過了,引用本身並不是乙個物件,而只是乙個別名(外號),因此不能定義指向引用的指標,但指標是乙個物件,所以存在對指標的引用。是不是有點繞,所以看**可能會好理解點。
int ival = 11;
int *p = &ival;//這句話其實可以拆成兩句話。int *p, p = &ival;
int **pp = &p;
int *&r = p; //從右向左讀吧,其中&代表r是乙個引用,*代表其是對指標的引用
int **&rr = pp;//一樣的道理 **代表其事對指標的指標的引用
*r = 22;
cout《以上內容許多是參考c++primer 這本書的,也別說抄襲了,因為這篇部落格更多的是一種學習筆記吧,全部手打的。博主本人也水平有限,大概加了一點自己的嘗試和想法,希望共同進步吧。
C C 中的引用與指標
想必大家對c 中的指標都有所了解,但是什麼是引用呢?c 11標準引入了 引用 的新功能。引用 reference 給物件起了另外乙個名字,引用型別引用 refers to 另外一種型別,通過將宣告符寫成 d的形式來定義引用型別,其中d是宣告的變數名 int val 1024 int d val 可以...
C C 指標和引用
指標是c語言的靈魂。通過指標,可以輕鬆地訪問記憶體中的資料,對資料進行讀寫 概念 指標是變數,用來存放記憶體位址,位址一般用16進製制的數字表示,用來唯一標識一塊記憶體,我們可以通過 獲取變數的位址 指標變數的定義語法 資料型別 變數名 指標變數與普通變數的區別 普通變數存放資料,指標變數存放位址 ...
C C 定義指標的引用
c 中定義指標的引用有什麼好處呢?首先指標引用的定義方式 以char型別為例 char ptr 我們知道在c語言中如果想改變實參指標所指向的位置,就要定義重指標,如下面的例子 錯誤 實參指標不能被賦值 void changeptr char ptr 如果要想改變實參指標所指向的位址,則需要定義重指標...