指標與引用 cast轉換

2021-09-25 23:11:16 字數 1993 閱讀 9370

指標與引用:

定義:

1、引用:

c++是c語言的繼承,它可進行過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。引用就是c++對c語言的重要擴充。引用就是某一變數的乙個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法:型別識別符號 &引用名=目標變數名;引用引入了物件的乙個同義詞。定義引用的表示方法與定義指標相似,只是用&代替了*。

2、指標:

指標利用位址,它的值直接指向存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為「指標」。意思是通過它能找到以它為位址的記憶體單元。

1.引用在定義時必須初始化,指標沒有要求 int &rnum; //未初始化不能通過編譯 int *pnum; //可以

2. 一旦乙個引用被初始化為指向乙個物件,就不能再指向 其他物件,而指標可以在任何時候指向任何乙個同型別物件

int inum = 10; int inum2 = 20; int &rnum = inum; &rnum = inum2;

//不能通過

3. 沒有null引用,但有null指標。

int *pnum = null; //可以 int &rnum = null;//不可以

4. 在sizeof中含義不同:引用結果為引用型別的大小, 但指標始終是位址空間所佔位元組個數(32位平台下占用4個位元組)。

char c1 = 1; char* pc = &c1; char& rc = c1;

cout6. 有多級指標,但是沒有多級引用

int &&rnum ; //不可以 int **ppnum; //可以

7.引用比指標使用起來相對更安全 指標需要判空

int num = 10; 012213be mov dword ptr [num],0ah int &rnum = num;

012213c5 lea eax,[num] 012213c8 mov dword ptr [rnum],eax int

*pnum =# 012213cb lea eax,[num]

8.訪問實體方式不同,指標需要顯示解引用,引用編輯器自己處理

9、如果返回動態記憶體分配的物件或者記憶體,必須使用指標,引用可能引起記憶體洩露。

012213ce mov dword ptr [pnum],eax 底層的實現方式相同,都是按照指標的方式來實現的

說一說c++中四種cast轉換

c++中四種型別轉換是:static_cast, dynamic_cast, const_cast, reinterpret_cast

1、const_cast

用於將const變數轉為非const

2、static_cast

用於各種隱式轉換,比如非const轉const,void*轉指標等,

static_cast能用於多型向上轉化,如果向下轉能成功但是不安全,結果未知;

3、dynamic_cast

用於動態型別轉換。只能用於含有虛函式的類,用於類層次間的向上和向下轉化。只能轉指標或引用。向下轉化時,如果是非法的對於指標返回null,對於引用拋異常。要深入了解內部轉換的原理。

向上轉換:指的是子類向基類的轉換

向下轉換:指的是基類向子類的轉換

它通過判斷在執行到該語句的時候變數的執行時型別和要轉換的型別是否相同來判斷是否能夠進行向下轉換。

4、reinterpret_cast

幾乎什麼都可以轉,比如將int轉指標,可能會出問題,盡量少用;

為什麼不使用c的強制轉換?

c的強制轉換表面上看起來功能強大什麼都能轉,但是轉化不夠明確,不能進行錯誤檢查,容易出錯。

C 型別轉換 Cast

1 reinpreter cast 此識別符號的意思即為資料的二進位制形式重新解釋,但是不改變其值。這個操作符能夠在非相關的型別之間轉換。操作結果只是簡單的從乙個指標到別的指標的值的二進位制拷貝。在型別之間指向的內容不做任何型別的檢查和轉換。用法 reinpreter cast expression...

指標與引用

摘自 高質量c 程式設計 指標與引用,在more effective c 的條款一有詳細講述,我給你轉過來 條款一 指標與引用的區別 指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用...

引用與指標

引用就是物件的另乙個名字,在實際的程式中,引用主要用作函式的形式引數。引用是一種復合型別,通過在變數名前新增 符號來定義。復合型別是指用其他型別定義的型別。在引用的情況下,每一種引用型別都 關聯到 某一其他型別。引用必須用與該引用同型別的物件初始化。當引用初始化後,只要該引用存在,它就保持繫結到初始...