C 中的引用

2021-10-19 13:59:13 字數 1468 閱讀 1169

引用和指標的區別和共性:

引用是一種更安全的指標

判斷引用的寫法可以先寫成指標,在把右邊的&挪到左邊覆蓋*

1.引用必須初始化,指標可以不初始化。

2.定義乙個引用變數和定義乙個指標變數在彙編指令上是一模一樣的,在指令上都是通過指標來進行的(定義時把需要被引用的位址存下來,賦值時先拿到引用的位址,再解引用),所以要求右邊的值必須要可以被取位址(比如引用乙個數是不行的)。通過引用變數修改引用記憶體的值,和通過指標解引用修改指標指向記憶體的值,底層指令也是一樣的。

3.引用只有一級引用,沒有多級引用。

swap分別用指標和引用的寫法

void swap(int *x,int *y)

void main()

void swap(int &x,int &y)

void main()

在彙編上沒有任何區別

與陣列的應用

int main();

int *p = array;

int (&q)[5] = array;//定義引用變數引用array

cout《左值引用和右值引用

左值:有記憶體,有名字,值可以修改

右值:沒記憶體,沒名字

int a = 10;

int &b = a;

c++11後提供了右值引用

int &&c = 10;

const int &d = 10;//加const就可以引用右值

//這兩句指令是一樣的,先把10這個值儲存到臨時量,再通過暫存器給到引用變數的記憶體

//不同之處在於d是常量不再能作為左值,而c可以修改它引用的臨時量記憶體

int &e = c;//右值引用變數c本身是乙個左值(有記憶體有名字,被引用不用生成臨時量)
總結:

1.右值引用專門用來引用右值型別,指令上可以自動產生臨時量,然後直接引用臨時量

2.右值引用變數本身是乙個左值,只能用左值引用來引用他

3.右值引用不能用來引用左值

引用和指標、const結合的一些場景

1.題目:寫一句**在記憶體的0x0018ff44處寫乙個4位元組的10

int *p = (int*)0x0018ff44;

//如果需要加上引用,則

int const *&p = (int*)0x0018ff44;

//或int *&&p = (int*)0x0018ff44;

int a = 10;

int *p = &a;

//判斷下面這行的對錯

const int *&q = p;

//是錯的

//還原成指標的形式:const int **q = &p;二級指標必須兩邊都有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 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。一 引用簡...