2016-05-14 24 views
-3

在C中,當我投射指向uintptr_t類型的指針時,它會截斷部分地址。無論如何要將整個地址存儲爲一個不大於8字節的整數或其他數據類型?uintptr_t太小,無法存儲地址

+0

它可能比只有分段內存的體系結構中的指針更小......是你的情況嗎? –

+6

「當我投入一個指針來鍵入uintptr_t時,它會截斷部分地址」。你確定這是發生了什麼,並且你沒有誤解結果嗎?請提供證明問題的[mcve]。 – kaylum

+0

根據C標準,'uintptr_t'必須存儲整個地址。可能你在代碼中有一個錯誤 –

回答

2

我不確定你在那裏面臨什麼,因爲uintpt_t通常應該足夠大以容納任何指針;如果類型存在,它必須足夠大以容納一個void *,因此任何指針的任何對象(C11草案n1570 7.20.1.4):

以下類型表示與所述特性的無符號整數類型,任何有效指向void 可以轉化爲這種類型,再轉換回指針 空隙, ,其結果將比較等於原始指針:

uintptr_t

[這種類型是可選]

值得注意的是有不能保證一個指針到功能可以轉換爲uintptr_t,然後再返回便攜,雖然這將是對POSIX的情況。


另外C標準不保證在所有的任何整數類型是大到足以包含上一個實現的指針;但是,如果存在uintptr_t類型,則不會是這種情況(uintptr_t類型是足夠大的類型)。