c-将数组初始化为代码块内的值0



这是的片段

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

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

有没有一种方法可以让这个东西工作起来,而不必每次在循环中初始化?

感谢

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

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

如果b的值可能很大,那么将其声明为本地数组可能会导致堆栈溢出。在这种情况下,更好的想法是使用calloc动态分配数组。CCD_ 3将正确地对CCD_ 4阵列进行零初始化。

如果数组相对较小并且可以安全地在堆栈上分配,那么您可以简单地将其声明为本地数组(这是您在原始代码中所做的),然后使用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));

相关内容

  • 没有找到相关文章