第2課 C 中的引用

2021-08-19 22:03:09 字數 2122 閱讀 8886

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...