如何在C中将数组初始化为0?

Cla*_*diu 150 c arrays initialization

我需要在C中使用一个大的空数组作为全局数组.除了输入外,还有什么方法可以做到这一点

char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 251

全局变量和静态变量自动初始化为零.如果你有简单的话

char ZEROARRAY[1024];
Run Code Online (Sandbox Code Playgroud)

在全局范围内,它将在运行时全部为零.但实际上一个速记语法,如果你有一个本地阵列.如果数组已部分初始化,则未初始化的元素将接收相应类型的值0.你可以写:

char ZEROARRAY[1024] = {0};
Run Code Online (Sandbox Code Playgroud)

编译器会用零填充未写入的条目.或者,您可以memset在程序启动时使用初始化数组:

memset(ZEROARRAY, 0, 1024);
Run Code Online (Sandbox Code Playgroud)

如果您更改了它并希望将其重置为全零,那将非常有用.

  • 您不应该使用“ {0}”。您应该使用“ {}”。http://stackoverflow.com/q/14797810/560648 (3认同)
  • {0}; 工作正常,C99 [$ 6.7.8 / 21]如果用大括号括起来的列表中的初始化程序少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符少于数组中的元素,聚合的其余部分应与具有静态存储持续时间的对象隐式初始化 (2认同)
  • 如果它是一个结构数组,并且在 gcc 中使用“-Werror=missing-braces”,则必须将其初始化为“{{0}}”。如果第一个结构体元素是其他结构体,则为“{{{0}}}”,依此类推。请参阅/sf/ask/380440581/ (2认同)
  • 今天我遇到了奇怪的...`int arr[256]={1,2,7,{0}};`...这把我带到了这里。直到我看到它之前,我什至不知道这种部分归零是一回事。 (2认同)

Deq*_*ing 30

如果您想将数组初始化为0以外的值,gcc您可以执行以下操作:

int array[1024] = { [ 0 ... 1023 ] = -1 };
Run Code Online (Sandbox Code Playgroud)

这是C99 指定初始化程序的GNU扩展.在较旧的GCC中,您可能需要使用-std=gnu99编译代码.

  • 指定的初始化程序是C99的标准.使用"..."表示范围是gcc特定的扩展. (14认同)