c 基礎知識4 引用

2021-10-23 18:01:10 字數 1785 閱讀 6053

含義:引用可以看作乙個已定義變數的別名

格式: type& name = var;

舉例:

int a =4;

int& b = a;

//b為a的別名

b =5

;//這裡操作b就是操作a,如果分別對a和b取址會發現位址相同,

//也就是說c++支援對同乙個位址起不同的別名。

如果寫成如下方式都是錯的:

int

& b;

//引用在定義的時候需要初始化,也就是需要指出b是哪一段位址的別名,這裡沒有初始化故報錯。

float

& b = a;

//這裡型別不一致會導致錯誤

意義:如果想讓乙個已經存在的變數擁有唯讀屬性,可以對其定義乙個const引用(別名)

舉例1:

int a;

const

int& b = a;

//const引用讓變數b擁有唯讀屬性

b =5

;//錯誤語法,因為變數b是唯讀屬性

int*p =

(int*)

&b;*p =5;

//正確語法,使用指標可以對該位址進行修改

舉例2:

const

int& b =2;

//當使用const時,可以使用常量2對其初始化,

//c++編譯器會為該常量值分配空間,該空間的別名即為b,該空間的值不能直接修改,但也可以使用指標修改。

//如: int *p = (int *)&b; *p = 5; 這樣就修改了該空間的值。

如果用指標作為函式引數,就會如下(比較繁瑣):

void

swap

(int

* a,

int* b)

intmain()

如果用引用作為函式引數,就會如下:

void

swap

(int

& a,

int& b)

intmain()

引用的實質:引用的本質為指標常量,旨在代替指標,盡可能的避開記憶體錯誤。

type& name; 等價於 type* const name;

如void f(int& a) 等價於 void f(int* const a)

辯證的看:引用只能說相對指標操作更加安全,但並不代表不會出錯。如下:

int

&func1()

//返回的值為引用

int&

func2()

intmain()

執行結果:i=***x,j=2

分析:a為函式的區域性變數,當執行完後a會被釋放,導致返回值不正常;

b為乙個靜態變數,函式執行完後仍存在,所以沒問題。

c++不支援引用陣列(補充)

int a =1;

int b =2;

int* pc =

newint(3

);//pc指向的是分配的堆空間

int& array=

;//這裡出錯,由於c++繼承了c語言的特性,

//陣列的元素位址在記憶體中是連續的,而這裡的

//元素為引用,既有堆空間、又有棧空間、而且位址

//也不連續,所以錯誤

C 基礎(05) 引用

1 引用就是給變數起乙個別名。其本質就是乙個指標常量 指標指向的位址不可以修改 int a 10 b 是a的別名。b和a所訪問的記憶體是相同的 int b a 2 注意事項 3 引用作為函式的引數 1 函式的引數傳遞可以為 值傳遞 位址傳遞 引用傳遞。其中值傳遞不會改變原來的變數內容,其相當於將原來...

C 基礎05 引用的基礎

變數名實質上是一段連續儲存空間的別名,是乙個標號 門牌號 程式中通過變數來申請並命名記憶體空間 通過變數的名字可以使用儲存空間 屬於c 編譯器對c的擴充套件 不能用c編譯器的角度思考引用 void main 普通引用必須初始化 void swap int a,int b 改變指標所指位址上的值 vo...

C 基礎語法 01 引用

變數名實質上是一段連續儲存空間的別名,程式通過變數來申請並命名記憶體空間,通過變數的名字可以使用儲存空間 c 中新增加的概念,引用可以看作乙個已定義變數的別名 定義引用的方式 type name var 引用作為其它變數的別,在一些場合可以代替指標,引用相對於指標來說具有更好的可讀性和實用性 引用在...