引用和指標的區別和共性:
引用是一種更安全的指標
判斷引用的寫法可以先寫成指標,在把右邊的&挪到左邊覆蓋*
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 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。一 引用簡...