为什么我们需要将数组初始化为0(null)?

时间:2011-06-20 20:02:04

标签: c arrays initialization

我发现在C语言中但是我不知道其他语言需要将数组初始化为0。

for (i = 0; i < MAXSIZE; i++)  {
    a[i] = 0;
}

有没有理由这样做?

在什么情况下我需要将数组初始化为0,在什么情况下我不需要?

5 个答案:

答案 0 :(得分:2)

对于每种语言的答案,您只需查看该语言文档即可。

即。 http://php.net/manual/en/language.types.array.php

http://docs.python.org/library/array.html

http://cvs.haskell.org/Hugs/pages/libraries/base/Data-Array.html

从历史上看,我们会将数组初始化为0,以防止错误的数据(其他内存使用的残余)出现在数组中。

答案 1 :(得分:2)

您需要初始化它的原因与初始化任何其他变量的原因相同,无论它是否为数组。如果您稍后要假设该数组的内容,您最好知道这些内容是什么。是将其设置为零还是其他某些值仅取决于您的特定程序的要求。

答案 2 :(得分:2)

如果要在创建数组后立即使用数组中的值,则希望这些值具有某些值。如果没有进一步的信息,0是一个很好的起始值。

如果您打算仅使用数组存储值(在开头)并且您并不真正关心其中的内容,请不要初始化。您可以节省引入错误的机会(以及运行时间的几纳秒)。

#include <stdio.h>
int main(void) {
    int arr[256];
    int ch;

    for (int k=0; k<256; k++) arr[k] = 0; /* initialized because we're going
                                           ** to use the values */
    while ((ch = getchar()) != EOF) {
        arr[(unsigned char)ch] += 1;        /* use the previous 0 */
    }
}

#include <stdio.h>
int main(void) {
    int arr[256];      /* not initialized */
    for (k = 0; k < 256; k++) {
        arr[k] = getchar(); /* initialization from file */
    }
}

答案 3 :(得分:2)

执行此操作的原因是因为数组将包含垃圾值(先前存储在该内存位置的值)。归零是一种很好的做法,因为零是一个值,如果使用不当,会导致易于查找和调试的问题(NULL取消引用等)。另一方面,垃圾值可能会让您觉得您的程序正常工作,只会让它在代码的某些不相关部分崩溃,因为您对垃圾值的错误使用会破坏其他内存位置。

答案 4 :(得分:0)

C99有关于第6.7.8节,第10节中的初始化的说法:

如果没有显式初始化具有自动存储持续时间的对象,则其值为 不定。如果未明确初始化具有静态存储持续时间的对象, 然后:

如果它有指针类型,则为    初始化为空指针;

如果    它有算术类型,它是    初始化为(正数或无符号)    零;

如果是聚合,则每一个    成员初始化(递归)    根据这些规则;

如果是的话    一个联盟,第一个命名的成员是    初始化(递归)根据    这些规则。