1樓:
是這樣的,c語言中,32-bit系統int和float雖然都佔4個位元組,
但是他們在記憶體中的儲存方式是不一樣的。
int型的3在記憶體中32-bit 16進位制是0x00000003
float型的3在記憶體中32-bit 16進位制是0x40400000
當你把指標v(原本指向int型)強制轉換指向float型時,
取值是根據float型方式去取值,所以是以float的記憶體儲存方式解釋,
所以pi在記憶體的值即3以float型解釋的話就變成:
1.000 0000 0000 0000 0000 0011e-127.
再取整的話顯然是0. 所以輸入結果變成了0.
float在記憶體中的儲存方式可以參考:
希望對你有幫助。
2樓:天雲一號
int *v = π 你這個可以這麼賦值麼,int型別不能給int *型別賦值
求大牛解決c語言指標的強制轉化問題!!!!!加上(short *)有什麼用?
3樓:匿名使用者
指標的強制轉換bai
並不影響最終的du結果
更多的是給編譯zhi
器用的dao
。在c裡面對指標不版同型別相互賦值做的要權求級別並不高
當源型別和目標型別不匹配時只是報一個warning, 而c++裡面就是錯誤了。
比如你這個 正確做法應該是
p=(char *)&a;
至於為什麼要加強制轉換, 其最根本的原因是
不同型別的指標,進行相互賦值的時候是很容易出現越界的。比如char *p, 這個指標可能只指向一個位元組的單元,(char c; p=&c;這樣), 如果賦值給int*q=p; 然後按照*q去賦值取值,就是絕對的越界操作。
對於程式設計中,如果不小心寫錯了,那麼就會引起不可預知後果,甚至可能是你執行測試幾十次都正常,但真正出成品了,到客戶手裡莫名其妙的出錯,查起來超難。
所以要求加強制轉換,就是為了避免這樣的不小心。 人性化一點的說,就是告訴編譯器,我知道我在不同型別之間賦值,我已經知道了這樣做的後果,也已經確定了可以承擔這個後果,你不要管我了。 於是編譯器就不管了,後果嘛,自負。
c語言中函式指標的強制型別轉換有什麼作用
如果你把sub函式bai改為int sub int a,int b,int c,int d,int e,int f,int g,int h 你就會發現後面du那幾個引數 就zhi變得不dao正常,道理很簡單,版引數push過少,函權數傳遞引數是把引數push進堆疊,在函式題裡面再pop出來,至於什麼...
c語言的指標問題,C語言的指標問題
printf c p 3 分佈來看,c是要列印輸出一個字元。p指向那個字元陣列,p就是字元 a 那麼 a 3是多少呢,a 1是b 2 是c 3 是d注意是 p 3 而不是 p 3 這是由區別的。是的。p 3。是對p指向的那個值加3,p開始是指向a的,故a加3後就是d了 而p 執行3次的話,是指標p本...
C語言指標問題,求教大神C語言指標的問題搞不懂求大神指教
include include include include include static char chongpai char static int pare const void const void static int allocateintegerarr const char size ...