4

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

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

更少的标准,更多的代码:

struct foo {
    void *p;
};

foo f;

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

4

2 回答 2

5

该标准说(8.5 / 4):

对 T 类型的对象进行零初始化意味着:

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

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

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

空指针常量是整数类型的整数常量表达式右值,其计算结果为零。空指针常量可以转换为指针类型;结果是该类型的空指针值

所以你会得到正确的NULL值。

于 2011-06-06T13:45:20.583 回答
2

到正确的空指针值。见 8.5/5

  • 如果 T 是标量类型 [并且指针是标量类型,请参见 3.9/10] 对象被设置为值 0(零)转换为 T
于 2011-06-06T13:42:46.360 回答