我发现在C语言中但是我不知道其他语言需要将数组初始化为0。
for (i = 0; i < MAXSIZE; i++) {
a[i] = 0;
}
有没有理由这样做?
在什么情况下我需要将数组初始化为0,在什么情况下我不需要?
答案 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节中的初始化的说法:
如果没有显式初始化具有自动存储持续时间的对象,则其值为 不定。如果未明确初始化具有静态存储持续时间的对象, 然后:
如果它有指针类型,则为 初始化为空指针;
如果 它有算术类型,它是 初始化为(正数或无符号) 零;
如果是聚合,则每一个 成员初始化(递归) 根据这些规则;
如果是的话 一个联盟,第一个命名的成员是 初始化(递归)根据 这些规则。