不同型別指標強制轉換可能存在的問題

2021-10-24 07:45:11 字數 712 閱讀 5303

char a[20]

="you_are_a_girl"

;int

*ptr=

(int

*)a;

ptr+=5

;

最終*ptr的值應該是多少?

開始以為是索引為5的字母的ascii碼,但實際上機驗證後發現出入很大,輸出了32767這個奇怪的數字

經過排查發現問題應該是出在int *ptr=(int *)a; 這裡,將char型別的指標強制轉換為int型別指標,在執行ptr+=5; 時,並不是加上sizeof(char)5個位元組,而是sizeof(int)5個位元組,於是最終ptr是指向了a[20],這是乙個未定義的值,稍微修改**,再次測試

在測試*ptr值得過程中,曾經對int *ptr=(int *)a; 直接輸出,但發現結果很是費解

指標強制型別轉換

當我們初始化乙個指標或給乙個指標賦值時,賦值號的左邊是乙個指標,賦值號的右邊是乙個指標表示式。在我們前面所舉的例子中,絕大多數情況下,指標的型別和指標表示式的型別是一樣的,指標所指向的型別和指標表示式所指向的型別是一樣的。例十四 1。float f 12.3 2。float fptr f 3。int...

指標型別強制轉換

問題為下 include void main 輸出為啥不是1呢 這個時候,我們可以看到函式式裡面有格式的轉換,如果格式轉換時存在除void格式外,還有兩個及兩個以上的格式的轉換,則這時候的指標所指的variable所佔的記憶體會產生變化,從而會使格式發生相應的變化 對於本題 當你強行將int指標變為...

不同型別資料間的轉換

1.標準型別資料間的轉換 在c 中,某些不同型別資料之間可以相互轉換,例如 int i 6,i 7.5 i 這種轉換編譯系統自動完成,使用者不加干預,這種轉換稱為隱式型別轉換。c 還提供顯示型別轉換,型別名 資料 如int 89.5 2 轉換建構函式 轉換建構函式的作用是將乙個其他型別的資料型別轉換...