gpt4 book ai didi

c++ - 我可以访问地址零吗?

转载 作者:IT老高 更新时间:2023-10-28 13:58:43 26 4
gpt4 key购买 nike

常量 0 在 C 和 C++ 中用作空指针。但正如问题 "Pointer to a specific fixed address"分配固定地址似乎有一些可能的用途。在任何系统中,对于任何低级任务,访问地址 0 是否有任何可能的需要?

如果有的话,用0作为空指针怎么解决?

如果没有,是什么确定没有这种需要?

最佳答案

无论是在 C 中还是在 C++ 中,空指针值都不会以任何方式与物理地址 0 相关联。您在源代码中使用常量 0 来设置指向空指针值的指针的事实只不过是一 block 语法糖。编译器需要将其转换为在特定平台上用作空指针值的实际物理地址。

换句话说,源代码中的0没有任何物理重要性。例如,它可能是 4213。 IE。语言作者,如果他们很高兴,可以这样做,以便您必须执行 p = 42 才能将指针 p 设置为空指针值.同样,这并不意味着物理地址 42 必须为空指针保留。编译器需要将源代码 p = 42 转换为机器码,以填充实际的物理空指针值(0x00000xBAAD ) 到指针 p 中。这正是现在使用常量 0 的情况。

另外请注意,C 和 C++ 都没有提供严格定义的功能,允许您将特定的物理地址分配给指针。因此,您关于“如何将 0 地址分配给指针”的问题正式没有答案。您根本无法将特定地址分配给 C/C++ 中的指针。但是,在实现定义的特性领域,显式整数到指针的转换旨在产生这种效果。所以,你会这样做

uintptr_t address = 0;
void *p = (void *) address;

注意,这和做的不一样

void *p = 0;

后者总是产生空指针值,而一般情况下前者不会。前者通常会产生一个指向物理地址 0 的指针,它可能是也可能不是给定平台上的空指针值。

关于c++ - 我可以访问地址零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2761360/

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