C 中的引用

2021-07-02 05:06:39 字數 2293 閱讀 3884

先說下變數:變數名實質上是一段連續儲存空間的別名,程式中通過變數來申請並命名記憶體空間,通過變數的名字可以使用儲存空間。

引用:在c++中引用可以看作乙個已定義變數的別名。

引用的語法: type& name = var;

int main()

輸出結果:

引用作函式引數時也是變數的別名。

#include using namespace std;

struct student

;//引用作函式的引數就是實參的別名

void printstu(student& stu)

int main()

執行結果:

先看下下面的程式:

#include using namespace std;

struct student ;

int main()

執行結果:

這個現象的背後隱藏了多少不為人知的秘密?

引用是乙個有位址,引用是常量

引用在c++

中的內部實現是乙個常指標;type& name <==>type* const name。

c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間大小與指標相同。

從使用的角度,引用會讓人誤會其只是乙個別名,沒有自己的儲存空間。這是c++

為了實用性而做出的細節隱藏:

當實參傳給形參引用的時候,只不過是

c++編譯器幫我們程式設計師手工取了乙個實參位址,傳給了形參引用(常量指標)。

若返回棧變數,可能亂碼,也可能不亂碼。

不能成為其它引用的初始值

不能作為左值使用

#include using namespace std;

int geta()

int& geta2()

int main()

執行結果:

可以成為其他引用的初始值

即可作為右值使用,也可作為左值使用

#include using namespace std;

static int a;

int geta()

int& geta2()

int main()

執行結果:

//相當於手工打造做左值的條件

int* fun2()

int main()

運算結果:

用引用去接收函式的返回值,是不是亂碼,關鍵是看返回 的記憶體空間是不是被編譯器**了。

#include using namespace std;

struct student

;int getstu(student **stu)

int getstu2(student* &stu)

int main()

分兩種情況:

const引用讓變數所只記憶體空間擁有唯讀屬性,這種用途用得比較多的有作波函式的形參

int a = 10;

const int &b = a;

a=11;//正確

b=11;//錯誤

#include using namespace std;

int main()

當使用常量(字面量)對const

引用進行初始化時,

c++編譯器會為常量值分配空間,並將引用名作為這段空間的別名,使用常量對const引用初始化後將生成乙個唯讀變數。

另外,const引用都可以通過指標支修改變數的值。這區別於我的另外一篇部落格,c/c++中的const。

C 中的引用

最近重新看c 看到些以前沒注意的dd,溫故而知新,暫且記下。引用是能自動間接引用的一種指標,即不必使用間接引用運算子 就可以得到乙個引用值。引用可以為變數起別名,它主要用作函式引數以及函式的返回型別。1 引用的定義 如 int i int j i j是i的引用。1 定義引用時,必須立即對它進行初始化...

C 中的引用

例1 int a int ra a 定義引用ra,它是變數a的引用,即別名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告引用時,必須同時對其進行初始化。4 引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數...

C 中的引用

引用是c 引入的新語言特性,是c 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。一 引用簡...