当我声明这样的二维数组时:
char myArray[20][30] = {"ABC", "Is Easy As One Two Three"};
我可以假设此数组中的所有其他字符现在都设置为\000
?
答案 0 :(得分:1)
对象永远不会在C中进行部分初始化 - 如果您使用了初始化程序,则保证整个对象被初始化(在这种情况下,“对象”是20个数组的整个数组,每个数组包含30个字符)。任何未显式初始化的成员都会递归初始化为零(对于算术类型)或NULL(对于指针类型)。
因此,在这种情况下,答案是肯定的 - 初始化程序未明确给出的所有char
值都保证为0.
这在C99标准第6.7.8节“初始化”中有所描述。相关段落是:
21如果初始化程序较少 一个括号括起来的清单 元素或聚合的成员, 或者字符串中的字符数更少 用于初始化数组的文字 已知尺寸比有元素 数组,其余部分 聚合应初始化 隐含地与对象相同 有静态存储时间。
和
10如果有自动对象 存储持续时间未初始化 显然,它的价值是 不定。如果有一个对象 静态存储持续时间不是 显式初始化,然后:
- 如果是的话 有指针类型,它被初始化为 空指针;
- 如果有算术 类型,它被初始化为(正面 零或无符号)零;
- 如果是的话 聚合,每个成员都被初始化 (递归地)根据这些 规则;
- 如果它是一个联盟,那么第一个 命名成员已初始化 (递归地)根据这些 规则。