5 C 裡的4種新型型別轉換

2021-09-07 16:54:40 字數 2651 閱讀 3626

1首先來回顧

c的強制轉換

大家都知道,在編譯

c語言中的強制轉換時

,編譯器不會檢查轉換是否成功

,都會編譯正確

.比如:

#include "

stdio.h

"struct

position

;int

main()

輸出結果如下圖所示:

從上圖可以看到,只有當執行**時

,才會出現段錯誤問題

.當c**上千行

,若出現這種問題

,是非常難找的

.2.c++的新型型別轉換

所以在c++中

,便引入了4強制型別轉換

2.1 static_cast(靜態型別轉換

)示例-基本資料:

int i = 0x45

;

char c = 'c'

; c = static_cast(i);

//char* pc = static_cast(&i);

//此行錯誤,不能用於基本指標之間轉換

示例-基本資料與物件轉換:

class

test

}; int

main()

示例-有繼承關係的類物件指標轉換:

class

parent

};

class child : public

parent };

intmain()

執行列印:

parent:3

mval:

100

2.2const_cast(去常型別轉換)示例:

const

int x =1; //

const:定義乙個常量x

const

int& j =2; //

const引用:定義乙個唯讀變數j

int& p1= const_cast(x); //

強制轉換int &

int *p2 = const_cast(&j); //

強制轉換int*

//int p3 = const_cast(j);

//此行錯誤,不能轉換普通資料型

p1=3

;*p2=4

;printf(

"x=%d, j=%d\n

",x,j);

printf(

"p1=%d *p2=%d\n

",p1,*p2);

輸出結果:

x=1   j=4

p1=3 *p2=4

從輸出結果

,可以看出修改

p1,p2,只有j

內容變換了

,是因為變數j用

const

引用定義的

,所以是個唯讀變數.

2.3 dynamic_cast(動態型別轉換

) -當轉換為指標時:

-當轉換為引用時:

示例-通過子類指標去指向父類:

#include using

namespace

std;

class

base

virtual ~base()

};class derived : public

base

;int

main()

示例-通過多重繼承下的類指標轉換: 

class

basea

}; class

baseb

}; class derived : public basea,public

baseb

;int

main()

2.4 reinterpret_ cast(解讀型別轉換) (解讀是指

:對要轉換的資料進行重新的解讀

)例如:

int i = 0

;

char j='c'

;int *p1=reinterpret_cast(&i);

char *p2=reinterpret_cast(&j);

//int p3=reinterpret_casti;

//此行錯誤,不能轉換普通資料型

5 C 基礎 C 的值型別

1 c 的值型別 有幾個特點 值型別分為兩類 struct 結構 enum 列舉 struct 結構 分為以下幾類 bool 使用者定義的結構。下表列出了 c 中內建型別中可用的值型別 型別描述 範圍預設值 bool 布林值true 或 false false byte 8 位無符號整數 0 到 2...

C 的4種強制型別轉換

首先看一下c語言下的型別轉換 將浮點型別值賦給整型變數時,捨棄其小數部分 將整型值賦給浮點型變數,值不變,但是以指數形式儲存 將double型別賦值給float型別變數時,注意數值溢位 字元型賦值給整型,則存入的是字元的ascll碼 將乙個int short long型別的值賦給char型別變數,只...

C 11 新型的型別轉換

include typedef void pf int struct point int main 輸出 無警告,無錯誤 段錯誤c 方式強制型別轉換存在的問題 問題 強制型別轉換在實際工程中是很完全難避免的!如何進行更加安全可靠的轉換呢?static cast const cast dynamic ...