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 轉換建構函式 轉換建構函式的作用是將乙個其他型別的資料型別轉換...