0

这是片段

main(){
//
  while(){
  int b;
  scanf("%d",&b);
  int arr[b];
  }
}

好的,由于我不知道数组的确切界限,我必须使用 scanf * 作为变量*。并且创建的数组包含垃圾值。为此,我必须将每个元素初始化为 0,因为这就是我想要的。

有没有办法让这个东西工作,而不必每次都在循环内初始化?

谢谢

编辑 我想我可以使用 calloc 来分配内存。使用的内存会有所不同吗?

4

2 回答 2

4

如果您需要一个运行时大小的数组,那么正确的方法取决于您的数组有多大。

如果 的值b可以很大,那么将其声明为本地数组会导致堆栈溢出。在这种情况下,更好的主意是使用calloc. 将正确地对数组进行calloc零初始化。int

如果数组相对较小并且可以安全地在堆栈上分配,您可以简单地将其声明为本地数组(这是您在原始代码中所做的),然后使用memset(arr, 0, sizeof arr).

当然,在这两种情况下,您最终都可能会在库函数中实现一个隐藏的内存归零循环。在一般情况下,不使用循环就不可能将大内存区域设置为零。

于 2013-07-14T08:20:44.380 回答
1

如果您的编译器支持 C99,那么您可以轻松使用 VLA;

int a, b; 
printf("Enter size of array: ");
scanf("%d",&b);

int arr[b];

并在您的情况下将其所有元素初始化为零,请使用内部循环或标准库函数memset

memset(b, 0, sizeof(b));
于 2013-07-14T08:23:34.183 回答