当我声明一个int变量时,不给它赋值,然后当我打印它时,会打印一个随机数。
但是,当我分配一个char变量,并使用%c
格式说明符打印它时,不会打印任何内容。那么,C中的char变量是否具有类似null的默认值?C中的局部变量是否以随机值开头?那么,为什么字符没有这样的行为呢?
没有分配给它的默认值。有些值是不可打印的,你可以假设随机值是其中之一,所以这就是你无法看到结果的原因。
C99标准规定:
如果具有自动存储持续时间的对象未初始化明确地说,它的值是不确定的。
附带说明:
按照C99
如果具有静态存储持续时间的对象未初始化明确地,那么:
- 如果它具有指针类型,则将其初始化为空指针
- 如果它是算术类型,则初始化为(正或无符号)零
- 如果它是一个聚合,则根据这些规则(递归地)初始化每个成员
- 如果是并集,则根据这些规则(递归地)初始化第一个命名成员
未初始化的自动变量具有不确定的值,我们可以通过C99标准草案6.7.8
初始化:
如果没有显式初始化具有自动存储持续时间的对象,则其值为不确定的
使用不确定的值是未定义的行为。不确定值的定义如下:
未指定的值或陷阱表示
可能只是您最终得到的char值不可打印。
没有指定默认值。永远不要相信你没有分配的默认值。