C:两个void指针的区别是什么类型?

标签 c pointers alignment void

如果我减去两个 void 指针,我会得到指针位置之间的相对距离(以字节为单位)(至少在我的测试系统上是这样)。我应该使用什么类型来存储结果,以便它与 64 位系统兼容? size_t 是正确的类型还是 long?

背景:我们需要检查给定的 void 指针用作双指针是否安全。我们曾经将指针转换为 int 并检查低三位是否为零,但是我们当前的编码标准不再允许将指针转换为整数类型。我正在考虑计算 void 指针和 NULL 指针之间的差异,并检查该差异是否可以被 8 整除。假设 NULL 指针总是 8 字节对齐?

最佳答案

C 标准中没有定义 void 指针的减法。仅当指针都指向同一个数组并且 void 指针不能指向任何数组时才定义指针减法,因为您不能拥有包含 void 元素的数组。

很可能您使用的是 gcc 或其他兼容的东西,它允许对 void 指针进行算术运算,作为将其视为 char 指针的扩展。但是严格的 C 编译器不应允许对 void 指针进行指针运算。

关于C:两个void指针的区别是什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36615981/

相关文章:

CFString内存泄漏

读取行缓冲流可以产生多行吗?

c - C 中字符串数组的插入排序

c++ - 删除后指向列表元素的指针

html - 需要实现特定的CSS Layout

c - 确保系统调用中的 UID/GID 检查在 RCU 临界区中执行

c - 不同类型和大小的指针的 union

c - 重写二维数组时内存泄漏

html - 响应式网站中的中心表

div 方形对齐问题中的 css div