關於強制轉化後的風險

2021-09-30 12:19:04 字數 499 閱讀 8830

char i = 3; 

char *q = &i;

long *p = (long *)(&i);

q的值為0x0013ff63;

q的內容為3;

p的值為0x0013ff63;

p的內容為-858993661;

都是i的位址為什麼結果不一樣?雖然q和p都為指標,但是q為char型別,而p為long型別,強制轉換時,位址被強行擴大,而這些擴充套件的位址裡內容未知,從而為不確定的值。

char i = 3; 

char *q = &i;

long p = (*(long *)(&i));

此時可以看到p的值為-858993661

而我們把i定位為int型別時:

int i = 3; 

long p = (*(long *)(&i));

此時可以看到p的值為3,這是因為在win32環境下,long和int佔的位數一樣,都是4個位元組,32位,從而強制轉化時,位址不需擴充套件。

資料型別的轉化 自動轉化 強制轉化

資料型別轉化,就是將當前資料型別轉化為其他資料型別 分為自動轉化和強制轉化 在 執行 if 判斷時 其他資料型別會自動轉化為布林型別 0 空字串 undefined null nan 這五種情況轉化為false 注0.0和0.00000等 都算是0 其他的所有都會轉化為 true 例如 字串裡空格 ...

資料型別的轉化 自動轉化 強制轉化

js資料型別的檢測,使用typeof 變數 資料 執行結果是變數中儲存資料的資料型別。布林型別的執行結果是 boolean var bool1 true console.log typeof bool1 a.其他型別轉化為布林型別 在執行if 判斷時,其他資料型別會自動轉化為布林型別。a 原則 轉化...

java父子類例項強制轉化後 各例項之間的關係

子類例項轉化為父類例項後 是否還從屬 instanceof 於子類?這個被轉化得來的父類例項是否能訪問子類重寫的方法 子類新新增的方法 子類新新增的成員屬性 是否還能轉化為子類例項?以下測試 建立乙個父類和乙個子類,父類擁有成員變數a 方法fun 子類擁有繼承的成員變數a 新定義的成員變數b 重寫的...