C 學習筆記6 C 中的引用

2021-06-23 07:02:56 字數 2213 閱讀 4323

c++中三目運算子可以返回變數本身,那麼c++對三目運算子進行了怎樣的處理?

關於變數名:

變數時一段實際連續儲存空間的別名,

程式中通過變數名來申請並命名儲存空間,

通過變數的名字可以使用儲存空間。

我們考慮一下:對於這一段記憶體,是否只能有乙個別名?

在c++中新增加了引用的概念:

引用可以看做是乙個已經定義變數的別名,

引用的語法: type& name = var;

//c++中的引用

int w = 2;

int & e = w;//e是w的別名,e和w指向同一段記憶體空間;宣告的時候必須用其他的變數初始化

e = 3;//修改e的值,也就修改了w的值

printf("w = %d,e = %d\n",w,e);

printf("w = %08x\n",&w); //

printf("e = %08x\n",&e); //輸出位址一樣

引用的意義:

引用作為其它變數的別名而存在,因此在一些場合可以代替指標

引用相對於指標來說具有更好的可讀性和實用性

swap函式的比較:

swap(int &a, int&b)

int t = a;

a = b;

b = t;

swap(a,b)

swap(int *pa, int *pb)

int t= *pa;

*pa = *pb;

*pb = t;

swap(&a,&b)

注意:引用作為函式引數時不需要進行初始化

const引用:

在c++中可以宣告const引用

const type& name = var;

const引用讓變數擁有唯讀屬性

//const引用

int m = 5;

const int& n = m;

//n = 9;//error const引用讓變數擁有唯讀屬性

int* k = (int*)&n;

*k = 9;

printf("m = %d\n",m);

printf("n = %d\n",n);

注意:使用常量對const引用進行初始化的時候,c++編譯器會為常量值分配空間,並將引用名作為這段空間的別名:

//const引用的初始化

const int &g = 1;//g是乙個唯讀變數

//int g = 2; //不能對g進行複製,說明g是乙個唯讀變數,使用常量對const引用進行初始化將生成乙個唯讀變數

int * l = (int*)&g;

*l = 5;

printf("g = %d\n",g);//g輸出為5

const int g = 1;//g是常量

int * l = (int*)&g;

*l = 5;

printf("g = %d\n",g);//g輸出為1

引用有自己的空間嗎?

struct ref

;printf("ref = %d\n",sizeof(ref));

輸出結果為8

//引用有自己的儲存空間,引用在c++內部實現是乙個常指標,說引用不佔儲存空間,是說引用不會為其指向的某個物件重新分配乙個位址,並不代表引用本身不佔空間

引用在c++中的內部實現是乙個常指標

type& name type* const name

c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間大小與指標相同。

從使用的角度,引用會讓人誤會其只是乙個別名,沒有自己的儲存空間。這是c++為了實用性而做出的細節隱藏。

void f(int &a)

等價於:

void f(int * const a)

當函式返回值為引用時

 若返回棧變數

• 不能成為其它引用的初始值

• 不能作為左值使用

 若返回靜態變數或全域性變數

• 可以成為其他引用的初始值

• 即可作為右值使用,也可作為左值使用

總結:bool型別是c++新增加的基礎型別,其值只能是true和false

 c++中的引用可以看作變數的別名來使用

 c++中的常引用可以使得乙個變數擁有唯讀屬性

 c++中的常引用可以用常量初始化而得到乙個唯讀變數

 c++中引用的本質是乙個指標常量

c 學習6 C 中的反射

反射的定義 審查元資料並收集關於它的型別資訊的能力。元資料 編譯以後的最基本資料單元 就是一大堆的表,當編譯程式集或者模組時,編譯器會建立乙個類定義表,乙個字段定義表,和乙個方法定義表等。system.reflection命名空間包含的幾個類,允許你反射 解析 這些元資料表的 system.refl...

C 學習筆記 6 C 記憶體管理

3 堆和棧的區別 4 記憶體的申請和釋放 5 malloc free與new delete 參考資料 內存在程式編譯的時候就已經分配好了,這塊內存在程式的整個執行期間都存在。例如全域性變數,static靜態成員變數 執行函式時,函式內部變數的儲存單元可以在棧上建立,函式執行結束時這些儲存單元自動釋放...

筆記6 C 中的static關鍵字

c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。1.面向過程設計中的static 1.1靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域性...