gpt4 book ai didi

我可以相信 (uintptr_t)NULL 等于零吗?

转载 作者:行者123 更新时间:2023-12-05 01:08:28 44 4
gpt4 key购买 nike

我知道 NULL 不需要是全位零模式。但我想知道如果

uintptr_t x = (uintptr_t)NULL;
printf("%" PRIuPTR, x);

保证打印0?我怀疑不是,但只是想确定一下。

或者更重要的是。我可以相信这个吗?

if( ((uintptr_t)f(x) | (uintptr_t)f(y)) != 0)

假设 f 是一个返回指针的函数。我怀疑这段代码很大程度上依赖于 NULL 是一个全零模式。我说的对吗?

我知道这被认为是不好的做法,我自己也不会写这样的东西,但我想知道它是否定义明确。

我在 this answer 中偶然发现了这段代码作者在哪里使用

while ( ( (uintptr_t)fgets(a,100,fp1) | (uintptr_t)fgets (b,100,fp) ) != 0 ) {
printf("%s",a);
printf("%s",b);
}

最佳答案

理论上:没有。

在实践中:可能。

在相关标准中,对空指针的检查是“特殊的”,因为它们不是与零值的数值比较,因此理论上,某些实现或平台可以为空指针分配不同的值。

关于我可以相信 (uintptr_t)NULL 等于零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65996388/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com