在C代码中将数组归零

Bat*_*man 37 c arrays

可能的重复:
如何在没有循环的情况下将数组初始化为C语言?
如何在C中初始化数组

如何在不使用for或任何其他循环的情况下将已知大小的数组归零?

例如:

arr[20] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
Run Code Online (Sandbox Code Playgroud)

这是漫长的道路......我需要它的简短方法.

Pra*_*rav 79

int arr[20] = {0};
Run Code Online (Sandbox Code Playgroud)

C99 [$6.7.8/21]

如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素 ,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.


  • 我认为这并没有明确表明它不复制括号中的元素。所以`float control[16] = {15.0};`并不是一个`15.0`复制了16次的数组,而是一个`15.0`,剩下的都是0。 (4认同)
  • 这对于重置而不是初始化数组也起作用吗? (3认同)
  • 为什么不只是 `int arr[20] = {};` 没有 `0`? (2认同)
  • @PrasoonSaurav 不错,但我想它不适用于动态数组 (2认同)

Ole*_*pin 56

int arr[20];
memset(arr, 0, sizeof arr);
Run Code Online (Sandbox Code Playgroud)

请参阅memset参考

  • @BarafuAlbino sizeof(arr)怎么会出错? (10认同)
  • 这可能是错的.你应该写`sizeof arr`或`20*sizeof(int)` (8认同)

小智 10

注意:您可以将memset与任何字符一起使用.

例:

int arr[20];
memset(arr, 'A', sizeof(arr));
Run Code Online (Sandbox Code Playgroud)

也可以部分填补

int arr[20];
memset(&arr[5], 0, 10);
Run Code Online (Sandbox Code Playgroud)

但要小心.它不受数组大小的限制,您可能很容易对程序造成严重损害,执行以下操作:

int arr[20];
memset(arr, 0, 200);
Run Code Online (Sandbox Code Playgroud)

它将在你的阵列之后工作(在windows下)和零内存.它可能会导致其他变量值的损坏.