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