制作数组后,C中的数组元素初始化为什么?
因此,当我用编程语言c创建一个数组时,所有元素最初初始化为什么?比如说,制作数组后,C中的数组元素初始化为什么?,c,arrays,C,Arrays,因此,当我用编程语言c创建一个数组时,所有元素最初初始化为什么?比如说, char array[5]; 创建一个包含5个元素的数组。最初的要素是什么?我打印出了元素,但它似乎是随机的,所以它们只是随机创建的,还是有一种方法来制作它们?未初始化数组(或任何未初始化对象)的内容尚未确定。访问它们会调用未定义的行为 char a[5], b[5] = {1, 2, 3, 4, 5}, c[5] = {42}; printf("%d\n", a[1]); // UB printf("%d\n", b[
char array[5];
创建一个包含5个元素的数组。最初的要素是什么?我打印出了元素,但它似乎是随机的,所以它们只是随机创建的,还是有一种方法来制作它们?未初始化数组(或任何未初始化对象)的内容尚未确定。访问它们会调用未定义的行为
char a[5], b[5] = {1, 2, 3, 4, 5}, c[5] = {42};
printf("%d\n", a[1]); // UB
printf("%d\n", b[1]); // 2
printf("%d\n", c[1]); // 0
请注意,静态对象或全局范围对象具有默认的零初始化。初始元素是什么取决于数组的定义位置和方式
在块作用域中定义的自动数组将包含垃圾。同时,静态数组将初始化为零
char a[5]; /* zeros */
int main()
{
static char b[5]; /* zeros */
char c[5]; /* garbage */
}
如果数组被声明为结构成员,则上述规则适用于包含结构对象的定义。这取决于初始化它们的位置
- 全局:数组中的所有值都将为0
- 本地:这些值将是一些垃圾值。它是随机的
无符号字符[]
,没有UB例外吗?像无符号字符uc[1];printf(“%u\n”,uc[0]*0)代码>可以吗?我相信有@chux;我在打电话,现在无法检查标准。