鉴于以下声明:
char inputBuffer[12];
数组中任何一个char的默认值是多少? 我很想知道这一点,因为如果我想在数组中清除一个位置,我需要知道给它的价值。
答案 0 :(得分:7)
数组元素具有不确定的值,除非数组在文件范围定义或具有static
存储类说明符,然后数组元素被初始化为0
。
#include <stdio.h>
char inputBuffer1[12]; // elements initialized to 0
static char inputBuffer2[12]; // elements initialized to 0
void foo(void)
{
char inputBuffer3[12]; // elements have indeterminate value!
static char inputBuffer4[12]; // elements initialized to 0
}
答案 1 :(得分:4)
如果char inputBuffer[12];
是全局的或静态的,则会使用\0
char inputBuffer1[12]; /* Zeroed */
static char inputBuffer1[12]; /* Zeroed */
int fn()
{
static char inputBuffer3[12]; /* Zeroed */
}
如果它是函数本地的,它包含垃圾值。
int fn2()
{
char inputBuffer4[12]; /* inderminate value */
}
引自 ISO / IEC 9899:TC2委员会草案 - 2005年5月6日WG14 / N1124
部分 6.7.8初始化(强调我的)
10如果未初始化具有自动存储持续时间的对象 显然,它的价值是不确定的。如果一个对象有静态 存储持续时间未明确初始化,然后:
- 如果有 指针类型,它被初始化为空指针;
- 如果有的话 算术类型,初始化为(正或无符号)零;
- 如果是聚合,则会初始化每个成员(递归) 根据这些规则;
- 如果是工会,则是第一个指定成员 根据这些规则初始化(递归)。