引用專題
變數名回顧
變數名實質上是一段連續儲存空間的別名,是乙個標號(門牌號)
程式中通過變數來申請並命名記憶體空間
通過變數的名字可以使用儲存空間
問題 1:對一段連續的記憶體空間只能取乙個別名嗎?
a) 在c++中新增加了引用的概念
b) 引用可以看作乙個***已定義變數***的別名
c) 引用的語法:type& name = var;
d) 引用做函式引數那?(引用作為函式引數宣告時不進行初始化)
#include
#include
intmain
(void
)
執行結果:
屬於c++編譯器對c的擴充套件
#include
#include
// question: is it possible to compile in c
intmain()
問題:c中可以編譯通過嗎? yes
執行結果:
普通引用在宣告時必須用其它的變數進行初始化,
引用作為函式引數宣告時不進行初始化
#include
#include
void
swap
(int a,
int b)
// methods a, using a pointer
void
swap1
(int
*a,int
*b)// method 2: use references
void
swap2
(int
&a,int
&b)int
main()
執行結果:
1)引用作為其它變數的別名而存在,因此在一些場合可以代替指標
2)引用相對於指標來說具有更好的可讀性和實用性
int
swap
(int
&a,int
&b)int
swap
(int
*a,int
*b)
思考1:c++編譯器背後做了什麼工作?
#include
#include
/*int swap1(int &a, int &b)*/
intswap2
(int
*const _a,
int*
const _b)
intmain()
執行結果:
引用是乙個有位址,引用是常量。。。。。
char
*const p
1)引用在c++中的內部實現是乙個常指標
type& name == type* const name
2)c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間大 小與指標相同。
3)從使用的角度,引用會讓人誤會其只是乙個別名,沒有自己的儲存空間。這是c++ 為了實用性而做出的細節隱藏
1)當實參傳給形參引用的時候,只不過是c++編譯器幫我們程式設計師手工取了乙個實參地 址,傳給了形參引用(常量指標)
2)當我們***使用引用***語法的時,我們不去關心編譯器引用是怎麼做的 當我們***分析奇怪的語法現象***的時,我們才去考慮c++編譯器是怎麼做的
#include
#include
void
boy_home
(int
**meipo)
void
boy_home1
(int
*&meipo)
intmain()
在 c++中可以宣告 const 引用
語法: const type& name = var;
const 引用讓變數擁有唯讀屬性
分兩種情況: 1. 用變數初始化常引用
2. 用字面量初始化常量引用
#include
#include
intmain()
const 引用結論:1)const & int e 相當於 const int * const e
2)普通引用 相當於 int *const e1
3)當使用常量(字面量)對const引用進行初始化時,c++編譯器會為常量值分配空間, 並將引用名作為這段空間的別名
4)使用字面量對const引用初始化後,將生成乙個唯讀變數
1. 使用未初始化的指標
int
main()
2. 將值當做位址賦給指標
int
main()
3. 忘記解引直接訪問記憶體
int
main()
return0;
}
4. 再次使用忽略重新賦初值
int
main()
while
(strcmp
(input,
"done")!=
0);return0;
}
C 特殊的「別名」引用
1 在c 中新增加了引用的概念 2 引用可以看作乙個已定義變數的別名 3 引用的語法 type name var 4 引用做函式引數那?引用作為函式引數宣告時不進行初始化 例項 include include intmain void 屬於c 編譯器對c的擴充套件。例項 問題 c中可以編譯通過嗎?i...
引用 變數的別名
1.引用只可以乙個變數所賦值,賦值之後不可以再作為另乙個變數的引用。舉例 int a 0 int b 1 int r a r b error 什麼可以被引用 真值,指標變數。for instance 1.int r 1 相當於 double temp double 1 其實應該也可以是int型別 i...
引用 變數的別名,並非指標
引用是乙個已經存在的物件的別名。一旦乙個物件初始化了這個引用,那麼名稱和引用都能夠用來引用該物件。int a 12 int ra a ra 是物件a 的乙個別名 ra 此時物件 a 11 a 10 ra 10 int pa ra pa 指標指向物件 a引用經常與指標混淆,可能是c 編譯器常常將引用像...