如果我没有将零传递给阵列,那么为什么这样做呢?什么时候才真正计算添加传递零或指定数组是否为空?请举个例子。
#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;
}
答案 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
。它可以很好地显示-128
和127
之间的任何内容。
答案 2 :(得分:0)
如果你没有初始化变量,它就包含垃圾。在这个给定的示例中,您不必关心它 - 因为在使用itoa
覆盖数组内容之前,您从未读过它。
如果您在初始化或为其分配任何值之前读取变量 - 您永远不会知道结果究竟会是什么。