C語言指標問題,指標型別強制轉換,求高手分析

2021-05-04 18:26:52 字數 1180 閱讀 6484

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 ...