size_t、intptr_t 和 uintptr_t 用于 c 中的数学
size_t, intptr_t, and uintptr_t for math in c
在某些代码中使用 size_t 值时,我 运行 遇到了一个小问题。
首先我想使用 size_t 因为它 [gua运行teed] 在大多数平台上都是相同的大小,这样从 32 位到 64 位应该不会造成任何问题。
然后我对 size_t 取反得到了一个很大的数,回过头来我发现 size_t 是无符号的。 intptr_t 也是有符号的,但应该用于指针,还有 uintptr_t 是无符号的,也用于指针。
我的最终目标是在 c 中实现一组简单的定点数学函数。
我的问题是我可以在所有计算中像使用 int 一样使用 uintptr_t 吗?这会导致任何问题吗?
如果您想在所有平台上拥有完全相同的位数,只需使用例如 int32_t 中定义的 stdint.h
你可以考虑ptrdiff_t
,这是指针不同产生的类型。在所有常见平台上,这应该是对应于 size_t
.
的签名类型
在某些代码中使用 size_t 值时,我 运行 遇到了一个小问题。
首先我想使用 size_t 因为它 [gua运行teed] 在大多数平台上都是相同的大小,这样从 32 位到 64 位应该不会造成任何问题。
然后我对 size_t 取反得到了一个很大的数,回过头来我发现 size_t 是无符号的。 intptr_t 也是有符号的,但应该用于指针,还有 uintptr_t 是无符号的,也用于指针。
我的最终目标是在 c 中实现一组简单的定点数学函数。
我的问题是我可以在所有计算中像使用 int 一样使用 uintptr_t 吗?这会导致任何问题吗?
如果您想在所有平台上拥有完全相同的位数,只需使用例如 int32_t 中定义的 stdint.h
你可以考虑ptrdiff_t
,这是指针不同产生的类型。在所有常见平台上,这应该是对应于 size_t
.