是否有必要将0传递给数组

时间:2014-03-15 11:15:13

标签: c arrays

如果我没有将零传递给阵列,那么为什么这样做呢?什么时候才真正计算添加传递零或指定数组是否为空?请举个例子。

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int i=  34;
    char array[10]={0};

    itoa(i, array, 10);

    printf("%s\n", array);

    return 0;
}

3 个答案:

答案 0 :(得分:2)

在这里,您不需要将数组初始化为零。 itoa并不要求初始化其使用的缓冲区。无论如何,它只会写入你初始化数组的任何内容。

如果你正在做一些实际上需要数组开始充满零的东西,那么= {0}就是必要的。如果您没有初始化数组,则访问其值是未定义的行为:

int array[10];
int x = 0;
for (int i = 0; i < 10; i++) {
    // Probably adds up garbage; might do anything.
    x += array[i];
}
printf("%d\n", x); // Probably prints garbage; might do anything.

答案 1 :(得分:1)

当你这样做时:

char array[10];

您告诉计算机为您分配一个10 char长内存位置,将第一个位置的地址分配给名为array的变量。

当你写:

char array[10] = { 1 };

此外,您告诉计算机将第一个内存位置设置为值1(因为您已在其中编写1),其余内容将设置为0(对于每个未指定的剩余位置都会发生这种情况,无论指定的位置是什么,都会0

当你这样做时:

char array[10] = { 0 };

您只需使用0 s设置所有10个。

如果你不需要每个位置,那么数组的每个元素都以0开头,那么没有初始化它们就没问题了。以下代码都很好:

#include <stdio.h>

int main( ) {
    char array[10];

    for ( int i = 0; i < 10; i++ )
        array[i] = i + 1;   // sets them from 1 to 10

    printf( "%d", array[5] );   // prints 6

    return 0;
}

但是这个会显示一个不一定一致的值:

#include <stdio.h>

int main( ) {
    char array[10];

    printf( "%d", array[5] );   // may print anything

    return 0;
}

例如,它在我的结尾显示-52。它可以很好地显示-128127之间的任何内容。

答案 2 :(得分:0)

如果你没有初始化变量,它就包含垃圾。在这个给定的示例中,您不必关心它 - 因为在使用itoa覆盖数组内容之前,您从未读过它

如果您在初始化或为其分配任何值之前读取变量 - 您永远不会知道结果究竟会是什么。