c 中引用相關概念總結

2021-08-21 16:48:04 字數 1878 閱讀 9819

1、先從下面這兩段**的執行結果開始看起:

int a = 10;  //在記憶體上開闢4個位元組, a就代表這個4個位元組記憶體

int *p = &a;  //讓乙個指標 指向這個4個位元組的空間

*p = 20;

cout << "a = " << a << endl;//20

int & b = a; //定義乙個引用b 指向a, b此時就是變數的a的別名

b = 40;

cout << "a = " << a << endl;//40

cout << "b = " << b << endl;//40

cout << "&a = " << &a << endl;//0x7ffdb085b99c

cout << "&b =" << &b << endl;//0x7ffdb085b99c

2、下面開始總結:   

2.1 引用型別與原型別保持一致,且不分配記憶體。與被引用的變數有相同的位址。

2.2 宣告的時候必須初始化,一經宣告,不可變更。(int & c,像這樣不初始化是錯的)

2.3 可對引用,再次引用。多次引用的結果,是某一變數具有多個別名。

2.4 &符號前有資料型別時,是引用。其它皆為取位址。

2.5 在研究引用的時候 ,可以將引用理解為 乙個常指標,在理解引用的時候, 可以將引用理解為 乙個變數的別名。

3、通過函式對比指標和引用:

3.1

void motifyaa(int *p) //int *p = &a; 

void motifybb(int &r) //int &r = a; 

3.2

void my_swap01(int *a, int *b)

void my_swap02(int &a, int &b)

4、引用作為函式的返回值:

int geta1()

//value_a = a; 

int &geta2()

//匿名的引用 int & = a;  //  int &temp = &a;

int &getbb()

int value_a = geta1();   //正確

int &r_a = geta2(); //禁止

int &r_b = getbb(); //此時的r_b 就是 getbb中的 static int b

說明:當函式返回引用時,返回的是變數的名稱,而不是變數的值,所以如果返回的是函式內部的區域性變數,就不可以用引用進行接收。就以getbb()為例,我們實際返回的是b,而不是100;因為我們可以進行如下操作:

getbb() = 3000; //static b  = 3000;

5、返回引用和返回變數的區別:

int& test()

int test()

int& a = test();

結論就是:

1 返回值為引用型(int& )的時候,返回的是位址。返回值不是引用型(int)的時候,返回的是乙個數值。

編譯器會先把這個數值放入乙個記憶體中,再把這個位址付給a,此時的a代表的位址和 m_data_代表的位址是不一樣。

2 不要在返回值為引用的函式中返回區域性變數,因為當函式結束時,臨時物件將消失,因此這種引用是非法的,在這種情況下,應返回物件。

6、const引用

const int a = 10; // a必須初始化

const int &b = a;

如果是乙個const 常量, 必須用const 引用來接收它。

C 類中相關概念

若條件判斷中出現了表示式 則計算表示式,結果若為0則為假,結果非0則為真。例如 for int i 10,j 1 i j 0 i j 假設a為乙個類 a a 表示宣告乙個a型別的物件。a b 宣告並定義乙個a型別物件,定義使呼叫無引數建構函式。a c 5 表示宣告乙個a型別的物件,並呼叫有引數建構函...

C 引用概念

這幾天看effective c 裡面不停的提到引用把我弄得有些懵,就來整理一下引用的部分知識 引用是某個變數的別名 比如乙個人的名字是張三,他的小名三三就是乙個別名 張三是他,三三也是他 為了說明這個例項,我們舉個例子 int zhangsan int ceshi intmain 可以把賦值看成是張...

引用相關知識總結

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