引用的本質就是給同乙個記憶體空間起不同的名字
#include
using
namespace
std;
int main()
引用必須要進行初始化
#include
using namespace std;
//引用的基本基本知識
void myswap(int
*a ,int* b)
int main()
//這種函式是萬萬要不得的,因為很可能導致系統的崩潰
void myswap(int
*a ,int* b)
#include
using
namespace
std;
//引用的基本基本知識
void myswap(int *a ,int* b)
//使用引用
void myswap02(int &a ,int &b)
int main()
對複雜資料的應用
#include
using
namespace
std;
//複雜資料型別的引用
struct teacher
;void printft(teacher &pt)
void printft2(teacher &pt) //引用相當於別名直接可惡意更改變數原來的數值
int main()
引用作為變數的別名存在,因此在一些場合可以替代指標
引用相對於指標有更好的可讀性和實用性
在單獨的定義乙個引用的時候,必須進行初始化,因此引用就像乙個常量
#include
using
namespace
std;
int main()
輸出的結果是一樣的,引用的位址使用一樣的,只是對同一塊位址不同的別名,這是一點很重要的點;
引用就是同一記憶體空間記憶體門牌號的不同別名
普通引用也佔記憶體空間
而且和指標占用的記憶體空間是一樣的
在32位系統中指標的大小固定是4無論指標的型別是啥大小都是4,也就是說當系統的架構大小固定的時候指標的大小是固定的
因此可以看出引用的本身其實就相當於常量指標,
type& name <==> type * const name;
c++編譯器在編譯的過程中使用常量指標作為引用的內部實現,也因此引用所占用得到空間與指標的大小是相同的;、
但是從使用的角度來說引用給人的感覺是變數的別名,沒有自己的儲存空間,但是記住這只是c++的實用性遮蔽了引用的本質,引用變數本身是佔記憶體的內部的大小和指標的相同,因為引用實現的細節就是常量指標;
不要使用c語言編譯器的思想來思考c++編譯器,在碰見左邊的形式的引用的時候c++編譯器會將其轉化為→_→的形式,當c++發現a為引用變數的時候會將a自動加上取值符號;所以不能以簡單的只針對額那一套來思考也引用,要考慮到c++的編譯器的作用;
並且在呼叫的時候c++編譯器會幫助我們取位址,因此呼叫的時候也只是將變數放到函式的就行例如:
函式的返回值當引用,返回值為棧變數的時候,不能當其他引用變數的初始值,也不能當左值使用,因為棧變數有生命週期。
但如果是靜態變數或者是全域性變數就可以
當返回值為棧變數的時候,會出現錯誤
#include
using
namespace
std;
//函式的返回值是乙個引用
int getaa1(void )
int& getaa2(void)
int* getaa3(void)
int main()
當為全域性變數或者靜態變數的時候正常的使用
#include
using
namespace
std;
//函式的返回值是乙個引用
int getaa1(void )
int& getaa2(void)
int* getaa3(void)
int main()
神奇的引用,使用引用函式能夠當左值,並且能夠實現函式的對接呼叫
#include
using namespace std;
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
////////
//函式當左值
// [11/23/2017 andrew]
//返回變數的值
int g1()
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
////////
// 返回變數本身 [11/23/2017 andrew]
//返回變數所標識的記憶體空間 //---------
//程式能夠正常的通過說明返回引用能夠當左值,因為返回引用返回的是變數本身
int & g2()
int main()
在c語言中可以通過指標修改const 型別的值,因此c語言中的const是乙個冒牌貨
指標存在的最大的意義,就是使用二級指標間接的賦值
c 引用小結
在c 中引用方式為 int c a 引用的本質為 int const c a 因此c本質是個指標常量,且其指標指向不可變。因此在有些需要傳遞某種資料型別的指標時,可以用引用的方式傳遞。引用的第二種方式,就是系統會自動對引用變數進行解引用取值操作 例如 int c a c 100 c 100int c...
C 引用小結
從之前的部落格中有提到,c 有兩種特性 return by value and return by reference 一種是返回值,一種是返回引用 並且,在一般情況下,傳引用比傳值效率更高。先說說引用是什麼,引用用的是 符號,符號既可以用來當引用,也可以用來當取位址符,只不過使用方法不同。引用的本...
C 引用的小結
一 引用的概念 例如 point pt1 10,10 point pt2 pt1 定義了pt2為pt1的引用。通過這樣的定義,pt1和pt2表示同一物件。需要特別強調的是引用並不產生物件的副本,僅僅是物件的同義詞。因此,當下面的語句執行後 pt1.offset 12,12 pt1和pt2都具有 12...