C 引用 自學筆記可能有錯

2021-10-02 08:51:42 字數 1839 閱讀 1401

引用就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣。

型別識別符號 &引用名=目標變數名

char &m = n;
引用變數 和 被引用的變數公用乙個空間,也就是說改變m或n ,m和n都會改變,在宣告引用的時候必須要初始化。

int main()

int main( )

float &fn2(float r) //定義函式fn2,它以引用方式返回函式值

int main() //主函式

上面程式返回的是全域性變數,如果返回的區域性變數,那麼返回值不可以作為引用的初始值。

#include using namespace std;

//int a = 100;

int & m() //這相當於返回a的記憶體空間

如果返回值是static 或者 全域性變數則可以成為其他引用的初始值,可以成為右值也可以成為左值。

引用作為返回值,必須遵守以下規則:

(1)不能返回區域性變數的引用。這條可以參照effective c++[1]的item 31。主要原因是區域性變數會在函式返回後被銷毀,因此被返回的引用就成為了"無所指"的引用,程式會進入未知狀態。

(2)不能返回函式內部new分配的記憶體的引用。這條可以參照effective c++[1]的item 31。雖然不存在區域性變數的被動銷毀問題,可對於這種情況(返回函式內部new分配記憶體的引用),又面臨其它尷尬局面。例如,被函式返回的引用只是作為一 個臨時變數出現,而沒有被賦予乙個實際的變數,那麼這個引用所指向的空間(由new分配)就無法釋放,造成memory leak。

(3)可以返回類成員的引用,但最好是const。這條原則可以參照effective c++[1]的item 30。主要原因是當物件的屬性是與某種業務規則(business rule)相關聯的時候,其賦值常常與某些其它屬性或者物件的狀態有關,因此有必要將賦值操作封裝在乙個業務規則當中。如果其它物件可以獲得該屬性的非常 量引用(或指標),那麼對該屬性的單純賦值就會破壞業務規則的完整性。

引用是除指標外另乙個可以產生多型效果的手段。這意味著,乙個基類的引用可以指向它的派生類例項。

在面試的時候被問了一下,只記得引用是別名什麼的,指標是指向位址。回來後立刻去蒐集一下知識點

這是其他博主寫的,感謝。

我這裡把主要的摘抄下來,詳細的可以去看看。

1、指標是乙個實體,需要分配記憶體空間。引用只是變數的別名,不需要分配記憶體空間。

2、引用在定義的時候必須進行初始化,並且不能夠改變。指標在定義的時候不一定要初始化,並且指向的空間可變。(注:不能有引用的值不能為null)

3、有多級指標,但是沒有多級引用,只能有一級引用。

4、指標和引用的自增運算結果不一樣。(指標是指向下乙個空間,引用時引用的變數值加1)。

5、sizeof 引用得到的是所指向的變數(物件)的大小,而sizeof 指標得到的是指標本身的大小。

6、引用訪問乙個變數是直接訪問,而指標訪問乙個變數是間接訪問。

7、引用更加的安全。

C 型別轉換 自學筆記 可能有誤

c風格的型別轉換 type b type a c 型別轉換提供了4中型別轉換操作符來對應不同場合的應用 1 static cast 靜態型別轉換 2 reinterpreter cast 重新解釋型別 3 dynamic cast 命名上理解是動態型別轉換。如子類和父類之間的多型型別轉換 4 con...

c 模板類學習 例子編譯可能有問題 注

1 模板的概念 我們已經學過過載 overloading 對過載函式而言,c 的檢查機制能通過函式引數的不同及所屬類的不同。正確的呼叫過載函式。例如,為求兩個數的最大值,我們定義max 函式需要對不同的資料型別分別定義不同過載 overload 版本。函式1.int max int x,int y ...

C 自學筆記 3 之引用

引用是變數的別名,格式 為 型別 引用變數 被引用變數 先看一段 int main void 輸出結果為1 0可見,改變引用的變數也會改變原變數,反之,更改a的值b也會發生改變 定義結構體變數coor,並定義c1對其進行引用 include using namespace std typedef s...