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