具有静态存储持续时间的对象中未初始化的指针是否初始化为 NULL 或全零?

发布于 2024-11-14 05:41:17 字数 256 浏览 4 评论 0原文

出于好奇,并且因为我现在手头没有标准的副本:

给定一个空指针不由全零模式表示的实现,具有静态存储持续时间的对象的未初始化指针成员是否会被初始化为正确的空指针值,还是全零值?

不太标准,更多代码:

struct foo {
    void *p;
};

foo f;

给定 0x00000001 的 NULL 指针表示,对于 main() 开头的 fp 的按位表示我能期待什么?

out of curiousity and because I don't have my copy of the standard at hand right now:

Given an implementation where null pointers are not represented by an all-zeros pattern, will uninitialized pointer members of objects with static storage duration be initialized to the proper null pointer value, or to an all-zeros value?

Less standardese, more code:

struct foo {
    void *p;
};

foo f;

Given a NULL pointer representation of 0x00000001, what can I expect for the bitwise representation of f.p at the beginning of main()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寄风 2024-11-21 05:41:17

标准说(8.5/4):

对 T 类型的对象进行零初始化
意思是:

—如果 T 是标量类型,则该对象设置为值 0
(零),作为积分常数
表达式,转换为 T

—如果 T 是非联合类类型,则每个非静态数据成员和每个
基类子对象为零初始化;

所以 f 被有效地初始化为 f = { (void *)0 },我们从 4.10/1 知道:

空指针常量是
积分常量表达式
计算的整数类型的右值
为零。空指针常量可以
转换为指针类型;这
结果是空指针值
那种类型

因此您将获得正确的 NULL 值。

The standard says (8.5/4):

To zero-initialize an object of type T
means:

— if T is a scalar type, the object is set to the value 0
(zero), taken as an integral constant
expession, converted to T

— if T is a non-union class type, each non-static data member and each
base-class subobject is zero-initialized;

So f is effectively initialised as f = { (void *)0 }, and we know from 4.10/1:

A null pointer constant is an
integral constant expression
rvalue of integer type that evaluates
to zero. A null pointer constant can
be converted to a pointer type; the
result is the null pointer value of
that type

So you will get the correct NULL value.

∞梦里开花 2024-11-21 05:41:17

到正确的空指针值。请参阅 8.5/5

  • 如果 T 是标量类型 [并且指针是标量类型,请参阅 3.9/10] 则将对象设置为转换为 T 的值 0(零)

To the proper null pointer value. See 8.5/5

  • if T is a scalar type [and a pointer is a scalar type, see 3.9/10] the object is set to the value of 0 (zero) converted to T
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文