2014-02-23 41 views
1

由于未分配任何值的静态变量声明进入BSS代码段。它会自动发起到零。c/C++中的静态指针默认值

问题: 假设,如果声明静态指针没有任何赋值,那么是否应该为地址或值为零值?

+0

注意,dup只标记C. –

+0

看起来你对指针变量及其值有点困惑。请记住,**指针变量本身就是一个变量**,这意味着它有一个值,但在这种情况下,您可以使用它的值作为地址。 –

回答

0

指针将指向地址零(大多数系统上为NULL)。在将其用作指针之前,您仍然需要将其指向某个有效的地方(例如,来自malloc)。

+0

不,它将被初始化为NULL指针值,无论它的表示是否为零。对于指针,常数0转换为NULL指针值,而不是所有零的位模式。 –

9

在C静态指针将被初始化为空值,则draft C99 standard6.7.8初始化段落说:

具有静态存储持续时间没有明确地进行初始化,则对象:

并包括以下项目符号:

- 如果它有指针类型,则它被初始化为空指针;

所以没有分配存储空间,它是一个空指针。还要注意它是一个实现定义的行为,其中存储了静态变量。

the C++ draft standard相关的部分应该是为8.5初始值设定款它说(重点煤矿):

如果一个对象没有指定的初始化,对象是默认初始化;如果未执行初始化,则具有自动或动态存储持续时间的对象具有不确定的值。 [注意:静态或线程存储时间为 零初始化的对象,请参阅3.6.2。末端音符]

零初始化是覆盖在段落它说:

要零初始化对象或类型T的参考是指:

并具有以下子弹:

- 如果T是一个标量类型(3。9)时,对象被设置为值0(零),作为一个积分常量表达式,转换为T;

其中脚注103说(重点矿山):

如在4.10指定,转换整数表达式中,其值是0至在一个指针类型的结果空指针值