全局数组声明器的 C++ 初始值与局部函数数组声明器的初始值 [duplicate]

c++ initial value of global array declarer vs initial value of local function array declarer [duplicate]

提问人:Asif_102 提问时间:2/16/2023 最后编辑:Asif_102 更新时间:2/16/2023 访问量:88

问:

#include <bits/stdc++.h>
using namespace std;

int a[100]; // <--

int main() {
    
    for (int i = 0; i < 100; i++) {
        cout << a[i] << " ";
    }
    
    return 0;
}

在上面的代码中全局声明数组后,所有索引都获得值 0。 这是什么原因?

#include <bits/stdc++.h>
using namespace std;

int main() {

    int a[100]; // <--

    for (int i = 0; i < 100; i++) {
        cout << a[i] << " ";
    }

    return 0;
}

在上面的代码中在 main 函数中声明数组并打印数组所有索引的值后,找到所有索引处的垃圾值

在竞争性编程中,我看到许多人在他们的代码中全局声明数组。但我不明白确切的原因

C++ 数组 C++17 静态初始化

评论

1赞 Solomon Ucko 2/16/2023
全局表示函数外部,局部表示函数内部
3赞 πάντα ῥεῖ 2/16/2023
@asif “我见过许多在他们的代码中全局声明数组” 请不要采用这种行为,它会降低你认真学习语言的机会,并在软件开发行业找到一份好工作。
0赞 BoP 2/16/2023
请注意,您可以在任何地方书写,并且它将始终被清除。为什么要为其他 rukes 而烦恼?int a[100] {};
0赞 PaulMcKenzie 2/16/2023
在竞争性编程中,我看到许多人在他们的代码中全局声明数组——我也看到许多人声明了一百万个元素的数组,只是因为问题指出可能有多达一百万个元素。如果你在面试中写这样的代码,我敢打赌你不会被录用。

答:

3赞 Remy Lebeau 2/16/2023 #1

如果变量声明没有指定显式初始值设定项,并且不是其构造函数初始化其数据的 / 类型(的一部分),则该变量仅在编译时默认初始化为零,当它在全局或静态作用域中声明时,而在局部作用域中声明时,它根本不默认初始化为任何内容。classstruct