2014-11-23 272 views
1

鉴于结构声明(其中data是一个指针到另一个结构的阵列)内:初始化指针数组为NULL一个struct

typedef struct { 
    B* data[10]; 
} A; 

似乎结构内的指针数组不自动初始化为NULL:

struct A myA; 
myA.data[0] == NULL (false!) 

有没有一种方法来强制数组初始化为NULL而不明确执行它?

回答

1

任何类型的对象可以被初始化为零:

struct A myA = { 0 }; 

此初始化第一标量构件或元件来0转换为适当的类型(嵌套的数组,结构和联合递归地定义),如果它是一个指针,它是一个空指针值。所有其余的成员或元素也被初始化为零。

一些编译器可能会提醒您有关缺少的初始化程序;由于= { 0 }是或应该是“将所有内容初始化为零”的常见习惯用法,因此可以忽略该警告。

+0

NULL不能保证全部0位代表 – 2014-11-23 22:46:39

+0

@ rowan.G:我很清楚这一点。但是'0'是一个空指针常量;它将被隐式转换为适当的指针类型,并且该转换将保证产生一个空指针值。 – 2014-11-23 22:47:23

+0

你是对的,我的信息是错误的。好像我已经写了几个月的臃肿代码... – 2014-11-23 22:49:03