繁体   English   中英

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

[英]Why do we need initialize an array to 0 (null)?

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

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

有这样做的理由吗?

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

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

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

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

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

从历史上看,我们会将数组初始化为0,以防止不良数据(其他内存使用量的剩余部分)进入数组。

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

如果要在创建数组后立即使用数组中的值,则希望这些值具有某种含义。 在没有更多信息的情况下, 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 */
    }
}

这样做的原因是因为数组将包含垃圾值(以前存储在该内存位置的值)。 归零是一个好习惯,因为零是一个值,如果使用不当,它会导致易于发现和调试的问题(NULL取消引用等)。 另一方面,垃圾值给您的印象是您的程序可以运行,只是使它在代码的某些无关部分中崩溃,因为您对垃圾值的不正确使用会破坏其他内存位置。

C99在6.7.8节第10节中对初始化有这样的说法:

如果未自动初始化具有自动存储期限的对象,则其值不确定。 如果未明确初始化具有静态存储持续时间的对象,则:

如果具有指针类型,则将其初始化为空指针;

如果具有算术类型,则将其初始化为(正数或无符号)零;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM