這個 C 語言宏中的星號有什么作用?
#define asreal(x) (*((float *) &x))
我知道 C 中的指標,但似乎這個宏中的星號被用于算術?我不確定這里到底發生了什么。
&x 位結果是否被強制轉換為浮點指標?那么為什么在那個運算式之外還有一個額外的星號呢?
uj5u.com熱心網友回復:
&x- 獲取地址x
(float*) &x- 投射到float*
*((float *) &x)取消參考轉換結果(結果型別為float)
(*((float *) &x))- 將其包裹在括號中,這樣它就不會干擾外部代碼
所以基本上,代碼將位元組放入x并將它們重新解釋為float. 請注意,此宏僅在以下情況下才有用
x是float已經或- 如果它包含等于有效的二進制資料
float。
它不能用于將intvalue 轉換為float(除非您嘗試使用 that 的位表示,而不是 value),如果像這樣或在很多其他可能性中int呼叫它也會中斷。asreal(x y)我也不確定它是否是在 C 中定義的行為,但如果你試圖“理解機器”,你可能已經為某些 UB 做好了準備。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462789.html
