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 對應用的操作與對變數直接操作效果完全相同。申明乙個引用的時候,切記要對其進行初始化。引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告乙個引用...