1
A
回答
6
*(uint32_t*)(p)
在存儲器位置提取32個無符號位。從在其天然類型的存儲器位置
(uint32_t)(*p)
提取物p和施放該類型到一個32位的無符號整型。
如果p是浮點類型,結果可能是最顯着的。提取第一種方法時,您可以看到浮點數的結果按位格式(符號|指數)。當提取第二種方式時,數字轉換爲整數,可能通過某種形式的截斷。
這裏有一個有趣的例子程序:
main(){
float x = 1.25, *xp = &x;
uint32_t x1 = (uint32_t)(*xp);
uint32_t x2 = *(uint32_t *)(xp);
printf("x1 = %x\nx2 = %x\n",x1,x2);
}
和輸出:
x1 = 1
x2 = 3fa00000
0
在前者中,首先將p
轉換爲uint32_t*
,然後對其進行解引用。
在後者中,首先,您取消引用p
,然後將其轉換爲uint32_t
。
相關問題
- 1. C++類型使用指針投射
- 2. 如何在C++中投射指針
- 3. 投射指針
- 4. C++ - 智能指針 - 在模板中投射智能指針
- 5. 在C++中投射一個指向易失性void **的指針
- 6. 在緩衝區中投射指針
- 7. cArray [] []指針陣列投射
- 8. 投射到文件指針
- 9. ether_ntoa指針投射問題
- 10. 將int投射到指針?
- 11. C++雙指針投
- 12. 在嵌入式系統上投射指針,通過指針投射在32位變量上的字節指針
- 13. 如何投射指針(使之變大)
- 14. 投射指向int的指針
- 15. 在C函數調用中使整數沒有投射的指針
- 16. 投射指向int的指針/存儲指向T的指針
- 17. 如何將基礎智能指針投射到C++中的派生指針?
- 18. 投射一個指向子類的指針(C++)
- 19. 賦值使整數的指針沒有在結構中投射
- 20. 將NULL投射到C中的結構指針?
- 21. 投射函數C++中的整數指針
- 22. 傳遞和投射方法指針
- 23. 匿名方法投射爲指針
- 24. 堆棧對象的投射指針
- 25. 函數指針,如何投射?
- 26. 將LONG投射到函數指針?
- 27. APUE 10.3信號:指針投射問題。
- 28. 動態投射智能指針
- 29. 我應該避免投射指針嗎?
- 30. 無法投射指針以輸入'double'
+1地說明了爲什麼它讓你做哪種方式的差異。 –
另一個重要的區別是,如果'p'不指向至少4個字節的內存(它可以指向頁面的最後一個字節,而不是另一個映射的頁面),或者'p '沒有正確對齊32位讀取(x86通常不關心,其他處理器並不總是如此寬容)。 –
將原始位解釋爲整數的版本違反嚴格的別名規則,導致未定義的行爲。 – EOF