gpt4 book ai didi

c - (size_t)((char *)0) 的计算结果是否为 0?

转载 作者:太空狗 更新时间:2023-10-29 15:01:30 24 4
gpt4 key购买 nike

根据"Why subtract null pointer in offsetof()?"中的回复(以及我对 K&R 的阅读),C 标准不要求 (size_t)((char *)0) == 0。不过,我从未见过将空指针强制转换为整数类型的情况。

如果存在 (size_t)((char *)0) != 0 的编译器或场景,它是什么?

最佳答案

如您所知,给定类型的空指针的物理表示不一定是全零位模式。当您强制将指针(任何指针)值转换为整数类型时,结果是实现定义的,但通常(这就是意图)指针的数值 - 数字地址 - 如果可能的话保持不变。这意味着,如果在给定平台上,char * 类型的空指针由 0xBAADF00D 模式表示(例如),则上述表达式的计算结果将是 0xBAADF00D,而不是归零。当然,为此您需要一个具有非零空指针的平台。我个人从未使用过此类平台,尽管我听说过许多类似的真实平台(例如,在嵌入式平台领域,这并不罕见)。

此外,作为附加说明,不同类型的空指针值可以有不同的物理表示,这意味着理论上你可以从 (size_t) ((int *) 0) 中得到不同的值, (size_t) ((char *) 0)(size_t) ((double *) 0)。但那将是一个相当奇特的情况,尽管从抽象 C 语言的角度来看是完全可能的。

附言阅读here (C 常见问题解答)有关具有非零空指针的实际平台的一些示例。

关于c - (size_t)((char *)0) 的计算结果是否为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2581522/

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