我有这个代码:
#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;为什么会发生这种情况?
和
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)
您显式初始化所有元素。前四个具有显式值,然后其余(单个,对于此特定数组)元素为零。