C 讀書筆記 C 引用

2021-10-13 19:13:41 字數 2521 閱讀 1266

引用變數是乙個別名,也就是說,它是某個已存在變數的另乙個名字。一旦把引用初始化為某個變數,就可以使用該引用名稱或變數名稱來指向變數。

c++ 引用 vs 指標

引用很容易與指標混淆,它們之間有三個主要的不同:

1、不存在空引用。引用必須連線到一塊合法的記憶體。

2、一旦引用被初始化為乙個物件,就不能被指向到另乙個物件。指標可以在任何時候指向到另乙個物件。

3、引用必須在建立時被初始化。指標可以在任何時間被初始化。

c++中建立引用

變數名稱是變數附屬在記憶體位置中的標籤,可以把引用當成是變數附屬在記憶體位置中的第二個標籤。因此,可以通過原始變數名稱或引用來訪問變數的內容。例如:

int i = 17;

可以為 i 宣告引用變數,如下所示:

int& r = i;

double& s = d;

在這些宣告中,& 讀作引用。

因此,第乙個宣告可以讀作 「r 是乙個初始化為 i 的整型引用」

第二個宣告可以讀作 「s 是乙個初始化為 d 的 double 型引用」。

下面的例項使用了 int 和 double 引用:

#include

using

namespace std;

int main (

)

當上面的**被編譯和執行時,它會產生下列結果:

value of i : 5

value of i reference : 5

value of d : 11.7

value of d reference : 11.7

把引用作為引數

c++ 支援把引用作為引數傳給函式,這比傳一般的引數更安全。

#include

using

namespace std;

// 函式宣告

void

swap

(int

& x,

int& y)

;int main (

)// 函式定義

void

swap

(int

& x,

int& y)

當上面的**被編譯和執行時,它會產生下列結果:

交換前,a 的值: 100

交換前,b 的值: 200

交換後,a 的值: 200

交換後,b 的值: 100

這個程式可以這樣理解,函式接受到a,b的值,引數是引用,x,y分別指向a,b的位址,所以可以把他們中間的東西換掉。如果引數不是int& x和int& y,就不會影響a,b位址中的東西,所以不會完成交換

把引用作為返回值

可以從 c++ 函式中返回引用,就像返回其他資料型別一樣。

通過使用引用來替代指標,會使 c++ 程式更容易閱讀和維護。c++ 函式可以返回乙個引用,方式與返回乙個指標類似。

當函式返回乙個引用時,則返回乙個指向返回值的隱式指標。這樣,函式就可以放在賦值語句的左邊。例如,請看下面這個簡單的程式:

#include

using

namespace std;

double vals=

;double

&setvalues

(int i )

// 要呼叫上面定義函式的主函式

int main (

)setvalues(1

)=20.23

;// 改變第 2 個元素

setvalues(3

)=70.8

;// 改變第 4 個元素

cout <<

"改變後的值"

<< endl;

for(

int i =

0; i <

5; i++

)return0;

}

當上面的**被編譯和執行時,它會產生下列結果:

改變前的值

vals[0] = 10.1

vals[1] = 12.6

vals[2] = 33.1

vals[3] = 24.1

vals[4] = 50

改變後的值

vals[0] = 10.1

vals[1] = 20.23

vals[2] = 33.1

vals[3] = 70.8

vals[4] = 50

可以理解為:返回值是什麼型別就怎麼用,這個返回了乙個引用,就可以給這個引用賦值,相當於改變其中存放的值。

當返回乙個引用時,要注意被引用的物件不能超出作用域。所以返回乙個對區域性變數的引用是不合法的,但是,可以返回乙個對靜態變數的引用。

int

&func()

C 讀書筆記

1.內建函式 inline必須在呼叫前進行完整定義,語 define相同,但是消除了不安全性 例 inline float circle float r 2,函式原型 語法形式 返回型別 函式名 參數列 1 函式原型的參數列中不包含引數的名字,而只包含型別 2 函式定義由函式說明部分和函式體構成 3...

C 讀書筆記

c陷阱和缺陷 1.賦值符優先順序比邏輯比較低,賦值表示式的結果為賦值後的結果 2.編譯器掃瞄符號使用貪心法,盡量選擇最長字元的符號串,如a 理解為a 而不是a 3.為相容老版本編譯器,不同符號之間最好加空格,如a 1可能理解為a 1,應該改為a 1 4.老版本編譯器,8進製數以0開始,後面可以加超過...

c 讀書筆記

再看一本叫做 stl lectures 的書,裡面有一段 讓我學習了 include includeusing namespace std template const t max const t x,const t y int main 我說這段 讓我學習,不是說它寫的多好 因為這段 在g 4.8...