C C 的型別轉換

2021-09-24 09:58:15 字數 1262 閱讀 6941

c語言的型別轉換分為隱式型別的轉換和強制型別的轉換。 隱式型別轉換:(適用於相近型別的轉換)

int main()

return 0;

}

int main()

因為c語言的隱式型別轉換坑很大,標準c++為了加強型別轉換的可視性,引入了四種命名的強制型別轉換操作符:

static_cast(相近型別的轉換)

static_cast用於靜態轉換,它對應的是c語言中的隱式型別轉換。編譯器隱式執行的任何型別轉換都可用static_cast,但是它不能用於兩個不相關的型別進行轉換。

void test1()

reinterpret_cast(不相關型別的轉換)

reinterpret_cast通常用於不相關型別的轉換。

void test2()

無關型別的轉換很強大,它還可以這樣(但是不建議使用):

typedef void(*func)();

int dosomething(int i)

void test3()

const_cast(去除const屬性的轉換)

const_cast最常用的用於刪除變數的const屬性,方便賦值。

void test4()

const_cast +reinterpret_cat---->等價於c語言中的強制型別轉換。

dynamic_cast

dynamic_cast只能用於多型,常用於將乙個父類物件的指標轉換為子類物件的指標或引用.

class a

};class b : public a

{};void fun(a* pa)

void test5()

需要注意的是:

dynamic_cast只能用於含有虛函式的類。

dynamic_cast會識別父類指標是指向父類,還是指向子類。

dynamic_cast會先檢查是否能轉換成功,能成功則轉換,不能則返回nullptr。

c語言的隱式型別轉化有些情況下可能會出問題;

顯式型別轉換將所有情況混合在一起,**不夠清晰。

C C 型別轉換

include include using namespace std int main 程式的執行結果如下 註解 int a 相當於將浮點數a的位址的前sizeof int 個位元組當成int型的資料輸出。float a 1.0f在記憶體中的表示是0x3f800000,當 int a強制轉換時,會...

C C 型別轉換

如果乙個int型的變數值為5,則若使用強制型別轉換或者使用memcpy,則相當於直接copy記憶體中的值,若列印,則會列印5對應的ascii值 而若使用函式轉換,則函式會操作記憶體轉為ascii值的5,若列印,則直接為5。memcpy在一定程度上相當於強制型別轉換,但是可以制定拷貝的位元組大小,因此...

C C指標的型別轉換

很多時候我們總是會將指標強制進行型別轉換,通過實驗和了解,總結一下規律,這裡記錄下來,方便以後自己使用 1 低位元組向高位元組轉換 比如 int float int型佔據4個位元組,但是float佔據8個位元組,起初你的資料是存放到4個位元組中的變數的,而後轉換成8位元組,讀取的時候會先讀取4位元組...