假设我创建了一个char数组,并假设char数组为空.如果我检查数组中第一个元素的值(arr [0]),这个表达式的结果是什么?
解决方法
这取决于数组的声明位置和方式.
如果数组在文件范围内声明(在任何函数之外),或者声明为静态,并且没有显式初始值设定项,则数组的内容将初始化为0.
如果数组是在块作用域(在函数或块内)声明并且未声明为静态,并且没有显式初始化器,则数组的内容是不确定的(实际上,垃圾值,其中一些可能是陷阱表示) ).
如果数组已经显式初始化,那么它包含初始化程序中的任何内容.
编辑
在回应下面的注释时,请注意您不应该依赖于块范围变量的隐式初始化.如果需要在创建时将块范围数组清零,请使用初始化程序:
char foo[N] = {0};
当初始化器中的元素少于数组中的元素时,数组中与初始化器中的元素对应的元素将被设置为指定的值;所有剩余的条目将被隐式初始化,就像它们被声明为静态一样.
在上面的示例中,这意味着foo的第一个元素显式设置为0,而所有剩余的元素都隐式设置为0.