我可以假设二维数组像这样正确初始化吗?

时间:2010-02-16 16:11:20

标签: c cstring

当我声明这样的二维数组时:

char myArray[20][30] = {"ABC", "Is Easy As One Two Three"};

我可以假设此数组中的所有其他字符现在都设置为\000

1 个答案:

答案 0 :(得分:1)

对象永远不会在C中进行部分初始化 - 如果您使用了初始化程序,则保证整个对象被初始化(在这种情况下,“对象”是20个数组的整个数组,每个数组包含30个字符)。任何未显式初始化的成员都会递归初始化为零(对于算术类型)或NULL(对于指针类型)。

因此,在这种情况下,答案是肯定的 - 初始化程序未明确给出的所有char值都保证为0.

这在C99标准第6.7.8节“初始化”中有所描述。相关段落是:

  

21如果初始化程序较少   一个括号括起来的清单   元素或聚合的成员,   或者字符串中的字符数更少   用于初始化数组的文字   已知尺寸比有元素   数组,其余部分   聚合应初始化   隐含地与对象相同   有静态存储时间。

  

10如果有自动对象   存储持续时间未初始化   显然,它的价值是   不定。如果有一个对象   静态存储持续时间不是   显式初始化,然后:

     

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

     

- 如果有算术   类型,它被初始化为(正面   零或无符号)零;

     

- 如果是的话   聚合,每个成员都被初始化   (递归地)根据这些   规则;

     

- 如果它是一个联盟,那么第一个   命名成员已初始化   (递归地)根据这些   规则。