C 引用小結

2021-08-11 04:31:40 字數 3138 閱讀 9762

引用的本質就是給同乙個記憶體空間起不同的名字

#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...