如何在没有循环的情况下将数组初始化为C语言?

Laz*_*Laz 9 c

可以说我有一个类似的阵列

int arr[10][10];
Run Code Online (Sandbox Code Playgroud)

现在我想将此数组的所有元素初始化为0.如何在没有循环或指定每个元素的情况下执行此操作?

请注意这个问题是否适用于C.

Mar*_*tos 15

快速解决方案:

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

如果初始化数组的任何元素,C将默认初始化您未明确指定的任何元素.因此,上面的代码将第一个元素初始化为零,而C将所有其他元素设置为零.

  • 只是为了澄清:它没有"跟风",它*强迫它们为零.如果你写了`= {1};`它会把第一个值设为1,其余的仍然是零. (9认同)
  • 这会将所有元素初始化为 0?为什么说它脏? (2认同)
  • 我说“quick-n-dirty”是因为,即使它在逻辑上是正确的并且保证可以工作,它也可能会使维护者感到困惑。我认为它是一种快捷方式,除非数组或数据结构太大而无法方便地初始化每个元素,否则避免使用它。 (2认同)

Ter*_*fey 6

除了初始化语法,您始终可以 memset(arr, 0, sizeof(int)*10*10)

  • 是的,技术上是O(n).这是不可避免的.在恒定时间内将任意数量的字节设置为相同值的唯一方法是使用非常大的磁体. (3认同)

Ara*_*raK 5

int arr[10][10] = {0}; // only in the case of 0
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 5

你很幸运:0,这是可能的。

memset(arr, 0, 10 * 10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

您不能使用 0 以外的其他值执行此操作,因为memset适用于字节,而不是ints。但是int,所有0字节将始终具有 value 0