这是片段
main(){
//
while(){
int b;
scanf("%d",&b);
int arr[b];
}
}
好的,由于我不知道数组的确切界限,我必须使用 scanf * 作为变量*。并且创建的数组包含垃圾值。为此,我必须将每个元素初始化为 0,因为这就是我想要的。
有没有办法让这个东西工作,而不必每次都在循环内初始化?
谢谢
编辑 我想我可以使用 calloc 来分配内存。使用的内存会有所不同吗?
这是片段
main(){
//
while(){
int b;
scanf("%d",&b);
int arr[b];
}
}
好的,由于我不知道数组的确切界限,我必须使用 scanf * 作为变量*。并且创建的数组包含垃圾值。为此,我必须将每个元素初始化为 0,因为这就是我想要的。
有没有办法让这个东西工作,而不必每次都在循环内初始化?
谢谢
编辑 我想我可以使用 calloc 来分配内存。使用的内存会有所不同吗?
如果您需要一个运行时大小的数组,那么正确的方法取决于您的数组有多大。
如果 的值b
可以很大,那么将其声明为本地数组会导致堆栈溢出。在这种情况下,更好的主意是使用calloc
. 将正确地对数组进行calloc
零初始化。int
如果数组相对较小并且可以安全地在堆栈上分配,您可以简单地将其声明为本地数组(这是您在原始代码中所做的),然后使用memset(arr, 0, sizeof arr)
.
当然,在这两种情况下,您最终都可能会在库函数中实现一个隐藏的内存归零循环。在一般情况下,不使用循环就不可能将大内存区域设置为零。
如果您的编译器支持 C99,那么您可以轻松使用 VLA;
int a, b;
printf("Enter size of array: ");
scanf("%d",&b);
int arr[b];
并在您的情况下将其所有元素初始化为零,请使用内部循环或标准库函数memset
。
memset(b, 0, sizeof(b));