1.引用定義與語法
引用可以看作乙個已經定義的變數的別名
引用的語法:type& name = var
#include int main(int argc, char** argv)
列印結果 a=5, b=5, &a = 0x22fe54, &b=0x22fe54
由於b就是a的引用,b引用a,那麼b就是a的別名,指代同一段記憶體空間。
注意:引用必須在宣告時使用其他變數進行初始化。
引用作為函式引數的時候可以不進行初始化。
2.引用的意義
a.在一些場合代替指標
b.相對於指標具有更好的可讀性
#include /* 交換函式 */
void swap(int &a, int &b)
int main(int argc, char** argv)
3.const的引用
a.const引用讓變數擁有唯讀屬性(只能通過指標訪問位址來改變量值)
b.當使用const引用進行初始化時,將生成乙個唯讀變數,會為該變數分配空間,並使用引用名作為這段空間的別名。
#include int main(int argc, char** argv)
同樣,只能通過指標來改變該變數的值,因此這是乙個唯讀變數。
宣告唯讀變數 const int &b = 1;
宣告常量 const int b = 1;
c.引用在c++中的內部實現是乙個常指標, 即
type& name <==> type* const name, 因此引用有自己的儲存空間,和指標占用的空間大小相同。
int* const a = &b; <==> int& a = b;
#include struct tref
;int main(int argc, char *argv)
;
printf("sizeof(char&) = %d\n", sizeof(char&)); /* sizeof(*rc)==sizeof(c)==1 */
printf("sizeof(rc) = %d\n", sizeof(rc)); /* sizeof (*rc) == 1 */
printf("sizeof(tref) = %d\n", sizeof(tref)); /* sizeof(rc) == 4 */
printf("sizeof(ref.r) = %d\n", sizeof(ref.r)); /* 1 */
return 0;
}
4.函式返回值為引用時
a.返回棧變數
不能成為其他引用的初始值
不能作為左值使用
b.返回靜態變數或全域性變數
可以成為其他引用的初始值
可以作為左值使用
#include /* 返回靜態區域性變數 a */
int & f(void)
int& g(void )
int main(int argc, char** argv)
int a = g(); /* 將區域性變數a的值返回, a=0 */
int &b = g(); /* b引用區域性的a,即b指向a處的4位元組空間,但是函式呼叫完a出空間會被釋放,b是隨機數 */
f() = 10; /* f()返回a的引用,因此可以列印出10,即指向靜態儲存區的引用的4位元組為10 */
因此 對於三目運算子
所有的可能返回都是變數,就會返回變數的引用,可以作為左值使用
可能返回有常量時,返回的是值
小結:
1.c++的引用可以看作變數的別名來使用
2.c++的常引用可以使乙個變數擁有唯讀屬性
3.c++的常引用可以使用常量初始化而得到乙個唯讀變數
4.c++中引用的本質是乙個常量指標
第2課 掌握C
1.定義結構體和類時別忘記在最後加入 號!例如class point 2.include 與 include h 的區別 不查詢執行時目錄,查詢執行時目錄!3.類的定義中,如果未指明成員型別,則預設為private.而結構體中則預設為public.4.引用 引用經常用在函式的傳參上。另外數值交換函式...
C 第5課 引用的本質分析
本文學習自 狄泰軟體學院 唐佐林老師的 c 課程 實驗1 可以使用變數和常量初始化const引用變數,const引用讓變數擁有唯讀屬性 注意1 不可以直接用字面常量初始化 引用變數,但是可以初始化 const引用變數 注意2 const引用讓變數擁有唯讀屬性,如 int a 4 const int ...
第2課 C到C 的公升級
本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 int c 0 for int i 1 i 3 i 對比 c語言中的變數都必須在作用域開始的位置定義!c語言中,重複定義多個同名的全域性變數是合法的 c 直接拒絕這種二交性的做法 面試中的小問題 int f 與 int f void...