c 中的引用的相關知識

2021-10-09 09:29:31 字數 2411 閱讀 1357

引用就是給乙個變數起別名,定義好之後,對引用和變數操作效果一樣。

資料型別 &別名 = 原名

舉個例子

int

main()

`

不存在空引用。引用必須連線到一塊合法的記憶體。

一旦引用被初始化為乙個物件,就不能被指向到另乙個物件。(指標可以在任何時候指向到另乙個物件。)

引用必須在建立時被初始化。(指標可以在任何時間被初始化。)

在實際程式中,我們不僅僅是用引用給某個變數起個別名,主要還是在函式引數傳遞過程中,可以利用引用的技術讓形參修飾實參

可以簡化指標修改實參

作用:函式傳參時,可以利用引用的技術讓形參修飾實參

優點:可以簡化指標修改實參

函式引數傳遞有兩種情況值傳遞和位址傳遞。在值傳遞的時候形參的改變無法對實參產生影響,但是位址傳遞的時候形參的改變會對實參產生影響。

引用傳遞:

在引用傳遞的過程中,被調函式的形參作為區域性變數在堆疊中開闢了記憶體空間,這時存放的是由主函式放進來的實際引數變數的位址,被調函式對形參的任何操作都被處理成間接定址,即通過堆疊中存放的位址訪問主函式中的實參,正因為如此被調函式對形參的任何操作都會影響主函式中的實參。即引用傳遞的時候形參的改變會對實參產生影響。

總結:1、引用傳遞,在函式定義時候,在形參前面加上引用運算子 「&」 ,在函式被呼叫的時候,引數傳遞的內容不是實參的值,而是實參的位址,即將實參的位址存放到編譯器為形參分配的記憶體空間上,因此對形參的任何操作都會改變相應實參的值。

2、位址傳遞,在被調函式中同樣要給形參分配儲存單元,且需要重複使用"*指標變數名"的 形式進行運算,這很容易產生錯誤且程式的閱讀性較差;另一方面,在主調函式的呼叫點處,必須用變數的位址作為實參。而引用更容易使用,更清晰。

下面通過實際案例比較三種形式的不同

//1. 值傳遞

void

myswap01

(int a,

int b)

//2. 位址傳遞

void

myswap02

(int

* a,

int* b)

//3. 引用傳遞

void

myswap03

(int

& a,

int& b)

intmain()

作用:引用是可以作為函式的返回值存在的

用法:函式返回值型別 &函式名()

注意:1、不要返回區域性變數引用,因為區域性變數在函式結束後就被銷毀了,此時的函式不知所措。

2、使用時,函式前要加上 &符號。

用法:函式呼叫作為左值

舉個例子示例:

myswap03

(a, b)

; cout <<

"a:"

<< a <<

" b:"

<< b << endl;

system

("pause");

return0;

}//返回區域性變數引用

int&

test01()

//返回靜態變數引用

int&

test02()

intmain()

intmain()

注意:什麼時候需要使用「常量引用」? 

如果既要利用引用提高程式的效率,又要保護傳遞給函式的資料不在函式中被改變,就應使用常量引用。

7、介紹引用的本質

之前介紹了引用的一些知識,接著說下引用的本質是什麼。

本質:引用的本質在c++內部實現是乙個指標常量.

(指標常量:指標指向是不可以修改的,指標指向的值是可以改動的)

結論:c++推薦用引用技術,因為語法方便,引用本質是指標常量,但是所有的指標操作編譯器都幫我們做了

例項:

//發現是引用,轉換為 int* const ref = &a;

void

func

(int

& ref)

intmain()

{int a =10;

//自動轉換為 int* const ref = &a; 指標常量是指標指向不可改,也說明為什麼引用不可更改

int& ref = a;

ref =20;

//內部發現ref是引用,自動幫我們轉換為: *ref = 20;

// 注意:我們在實際使用的過程中,不要考慮太多,直接預設 ref = a 即可。

cout <<

"a:"

<< a << endl;

cout <<

"ref:"

<< ref << endl;

func

(a);

return

0

未完待續~~~~~~~~~~

C 中引用的基礎知識

include using namespace std 1 引用的基本概念 int main01 2 引用是c 的語法範疇,是屬於c 編譯器對c的擴充套件 c編譯器不能通過引用這個概念 3 引用做函式引數 普通引用在宣告的時候必須用其它的變數進行初始化 引用作為函式引數宣告時不進行初始化 int m...

引用相關知識總結

1.什麼是 引用 申明和使用 引用 要注意哪些問題?答 引用就是某個目標變數的 別名 alias 對應用的操作與對變數直接操作效果完全相同。申明乙個引用的時候,切記要對其進行初始化。引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告乙個引用...

c 中的友元的相關知識

c 中建立類的時候會有公共許可權 保護許可權 私有許可權。往往是訪問不到乙個類中私有許可權中內容的。在程式中,有些私有屬性 也想讓類外特殊的一些函式或者類進行訪問,就需要用到友元的技術,這樣一來兩個類就可以共享資料。節省記憶體空間。如果友元是一般成員函式或者類的成員函式,則稱為友元函式,如果友元是乙...