C 中数组初始化的差异

Ela*_*paz 0 c arrays pointers

我有这个代码:

#include <stdio.h> 
int main()
{
    int arr2[5];
    arr2[0] = 0;
    arr2[1] = 1;
    arr2[2] = 2;
    arr2[3] = 3;
    int arr3[5] = {1, 2, 3, 4};
}
Run Code Online (Sandbox Code Playgroud)

当我打印每个数组的第五个位置时,我得到不同的结果:

printf("Fifth: %d\n", arr2[4]); // Prints Random number 
printf("Fifth: %d\n", arr3[4]); // Prints Zero!
Run Code Online (Sandbox Code Playgroud)

输出:

Fifth: -858993460
Fifth: 0
Run Code Online (Sandbox Code Playgroud)

我知道第一个是指向内存中第五个位置的指针,第二个是数组如何用 0 初始化。我不明白为什么他们给我两个不同的值。在这两种情况下我都将数组的大小设置为 5;为什么会发生这种情况?

Som*_*ude 5

int arr2[5];
arr2[0] = 0;
arr2[1] = 1;
arr2[2] = 2;
arr2[3] = 3;
Run Code Online (Sandbox Code Playgroud)

你实际上并没有初始化数组。您可以在未初始化的情况下创建它,并且每个元素的值都不确定。然后分配给四个单独的元素,使第五个元素未初始化。

另一方面,与

int arr3[5] = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

您显式初始化所有元素。前四个具有显式值,然后其余(单个,对于此特定数组)元素为零。