引用是c++中乙個很重要的概念。英文為reference,引用定義了物件的乙個別名。當物件的值修改時,引用會發生對應的改變;當引用的值發生改變時,被引用的物件的值也發生變化,因為物件和物件的應用操作的是同一位址單元。
1、引用的定義
使用int & a = b;即可定義整型變數b的引用a。
(1)由於引用是物件的別名,因此引用在定義的時候就必須初始化。int &c;這種寫法是不合法的。
(2)非const引用在定義時
必須使用同型別的物件
初始化。int &c=42;這種寫法是不合法的。double a=3.14; int &b=a;這種寫法也不合法,因為引用是int的,而初始化使用的是double型別的,型別不匹配。
2、常引用(const reference)
const引用有較多使用。它可以防止物件的值被隨意修改。因而具有一些特性。
(1)const物件的引用必須是const的,將普通引用繫結到const物件是不合法的。這個原因比較簡單。既然物件是const的,表示不能被修改,引用當然也不能修改,必須使用const引用。
實際上,const int a=1; int &b=a;這種寫法是不合法的,編譯不過。
(2)const引用可使用相關型別的物件或右值初始化。這個是const引用與普通引用最大的區別。const int &a=2;是合法的。double x=3.14; const int &b=a;也是合法的。
3、常引用的原理
const引用的目的是,禁止通過修改引用值來改變被引用的物件。const引用的初始化特性較為微妙,可通過如下**說明:
double val = 3.14;
const int &ref = val;
double & ref2 = val;
cout<
int temp = val;
const int &ref = temp;
如果ref不是const的,那麼改變ref值,修改的是temp,而不是val。期望對ref的賦值會修改val的程式設計師會發現val實際並未修改。
4、(int &)
說到引用就需要提一下(int &),這是乙個強制的型別轉換。幾年前乙個非常有名的筆試題,簡寫在這裡
float a = 1.0;
cout<<(int &) a<
需要理解(int &)a表示的是什麼。變數a是浮點型別的,(int &)a表示將浮點型別變數a強制轉換成int型別的引用。雖然普通整型引用無法用非整型變數初始化,但是c++卻提供了引用的強制型別轉換。
引用是變數的別名,與變數指向同一記憶體位址。現在變數是浮點型,使用浮點型別的格式儲存,在c++中是ieee 754標準,使用強制型別轉換,將轉換為一整型引用,即是將其浮點型別的儲存方式按照整型的儲存方式進行解讀。
1.0f的ieee 754浮點表示為0011 1111 1000 0000 0000 0000 0000 0000,按照整型變數的儲存格式解釋為2^29+2^28+2^27+2^26+2^25+2^24+2^23=10 6535 3216。
(int&) a的一種等價的寫法是*((int*) &a),即取a的位址&a,將其強制轉換為int指標型別,即表示將該位址儲存的是int型別,位址未發生變化,但是位址型別由浮點型別變為整型,然後取該位址的內容,由於該位址是int型別,因此就按照int型別的儲存方式解讀了。下面的**可以證明這一點:
float a = 1.0f; // 浮點數
cout<<&a<
上述方法可以用來檢視機器中浮點數的儲存機制,因為整型變數的儲存方式總是相同的,而浮點數的儲存則可能存在差異性。
——the end——
引用使用 C 引用的使用方法
c 中引用是指給乙個變數起別名,別名和變數指向同一塊的記憶體資料 引用的基本語法 引用的基本語法 資料型別 變數名 該資料型別的變數 int x 10 int a x 引用的注意事項 1.引用在定義時必須初始化 int a 錯誤 引用 a 變數需要初始值設定2.引用在初始化之後就無法修改 用引用做函...
C 變數的引用 使用變數的引用
c 可以對乙個資料可以使用引用,引用是c 對c語言的乙個重要擴充,引用是一種新的變數型別,它的作用是為乙個變數起乙個別名。比如要給變數temp起個別名change int temp 定義整型變數temp int change temp 宣告change是temp的引用上述 宣告了change是tem...
關於C 引用C,C引用C ,extern的使用
由於自己理解還不夠透徹,所以不能說寫什麼出來,但是看到這裡面的內容,然後自己也去操作了一下,覺得真的挺不錯的。在實際操作原文例子的時候要注意檔案,c與c 的區別,例子1是c 引用c,標頭檔案使用的是 extern int foo int x,int y 在c 檔案中模組中,要引用標頭檔案 inclu...