首页 > 后端开发 > C++ > 取消引用 NULL 指针以获得 C 中定义的行为的引用吗?

取消引用 NULL 指针以获得 C 中定义的行为的引用吗?

DDD
发布: 2024-12-07 06:59:12
原创
237 人浏览过

Is Dereferencing a NULL Pointer to Obtain a Reference Defined Behavior in C  ?

解引用 NULL 指针以供参考:解释和标准

在 C 中,以下代码提出了标准规定的问题:

int* ptr = NULL;
int& ref = *ptr;
int* ptr2 = &ref;
登录后复制

具体来说,是否允许取消引用 NULL 指针来获取引用,这样的操作的结果是什么?

标准解释

根据 C 标准,取消引用 NULL 指针被视为未定义行为。标准第 8.3.2/4 节明确说明了这一点:

注意:特别是,空引用不能存在于明确定义的程序中,因为创建此类引用的唯一方法是将其绑定到通过取消引用空指针获得的“对象”,这会导致未定义的行为。

实现含义

然而,在实践中,许多编译器通过将结果设置为 NULL 来实现此行为。这意味着所提供的代码片段中的 ptr2 将被赋予 NULL 值。

编译器解释

需要注意的是,上述行为不能由标准,并且可能因不同的编译器和平台而异。例如,某些编译器在取消引用 NULL 指针时可能会引发异常或执行其他特定于平台的操作。

特定异常

此规则的一个例外是使用NULL 指针上的 sizeof 运算符。在这种情况下,取消引用实际上不会发生,并且 sizeof 可用于确定类型的大小,而不会导致未定义的行为。

以上是取消引用 NULL 指针以获得 C 中定义的行为的引用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板