2011-06-20 223 views

回答

21

它是一个有符号整数类型,它足够容纳一个指针。

+3

值得指出的是,在32位和64位平台上,控股指针部分可能会有不同的大小...... – Goz

+1

s/a指针/任何指针/ – ninjalj

+0

只是出于好奇:为什么有必要有[u] intptr_t的签名和未签名版本? – JohnTortugo

1

它是一个有符号整数类型,保证可以容纳void*类型。

为什么还有[u]intptr_t?这是因为:

任何有效的指向void可以被转换为intptr_tuintptr_t 和背部与值没有变化。 C标准 保证指向void的指针可以被转换为或指向任何对象类型的指针并返回,并且结果必须与原始指针相比较 。因此,在支持uintptr_t的实现中允许将 直接从char *指针转换为uintptr_t

+0

这是从哪里引用的? – Yotam

+1

你让我了。这里:https://www.securecoding.cert.org/confluence/display/c/INT36-C.+Converting+a+pointer+to+integer+or+integer+to+pointer –