C:两个空指针的区别是什么? [英] C: what type is the difference of two void pointers?
本文介绍了C:两个空指针的区别是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
背景:我们需要检查给定的空指针用作双指针是否安全。我们曾经将指针强制转换为int,并检查较低的三位是否为零,但我们当前的编码标准不再允许将指针强制转换为整数类型。我正在考虑计算空指针和空指针之间的差异,并检查该差异是否能被8整除。假设空指针始终是8字节对齐的?
推荐答案
来自C11, 6.5.6 Additive operators /9
(我的斜体):
当两个指针相减时,两个指针都指向同一数组对象的元素,或者指向数组对象的最后一个元素之后的一个元素;结果是两个数组元素的下标的差异。结果的大小由实现定义,其类型(带符号整数类型)根据该节,从指针中减去NULL在技术上也是未定义的行为,因为ptrdiff_t
在<stddef.h>
头中定义。
NULL
绝不能被视为指向同一数组的元素或指向该数组之外的元素的指针。指针减法实际上仅限于获取同一数组中两个元素之间的索引差异。
因此,您可能需要重新考虑您正在进行的检查,特别是考虑到双精度型实际上不需要8个字节的长度,并且即使它是8个字节的长度,标准中也没有要求它必须与8个字节的边界对齐。
我更倾向于在您的函数的文档中声明,传递的值需要是有效的double
指针,如果您的函数的用户违反了该约定,则所有赌注都将失败。
这篇关于C:两个空指针的区别是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文