我需要一个大的 C 语言全局空数组。除了手动输入,还有其他方法吗?
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
我需要一个大的 C 语言全局空数组。除了手动输入,还有其他方法吗?
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
全局变量和静态变量会自动初始化为零。如果你只是
char ZEROARRAY[1024];
在全局范围内,运行时将全部为零。但实际上,如果您有一个本地数组,则存在一种简写语法。如果数组部分初始化,则未初始化的元素将收到相应类型的值0。您可以编写:
int arr[10] = {1, 2}; // arr[0] = 1, arr[1] = 2, others are 0
char ZEROARRAY[1024] = {0};
编译器会用零填充未写入的条目。或者你可以使用memset
在程序启动时初始化数组:memset(ZEROARRAY, 0, 1024);
如果您已更改它并希望将其重置为所有零,则这将非常有用。
{}
讨论:https://dev59.com/EmMm5IYBdhLWcg3wdu5V memset
不是显然正确的:我认为它只适用于0:https://dev59.com/SGgu5IYBdhLWcg3ws5FC - Ciro Santilli OurBigBook.com-Werror=missing-braces
,则必须将其初始化为{{0}}
。如果第一个结构体元素是另一个结构体,则为{{{0}}}
,以此类推。请参见https://dev59.com/qm035IYBdhLWcg3wZ_Qt。 - Tor Klingbergint arr[256]={1,2,7,{0}};
... 这让我来到这里。直到看到这个东西,我甚至不知道部分清零是一种技巧。 - Neil Gatenby如果您想将数组初始化为除0以外的值,使用gcc
,您可以执行以下操作:
int array[1024] = { [ 0 ... 1023 ] = -1 };
这是C99的GNU扩展指定初始化器。在旧版的GCC中,您可能需要使用-std=gnu99
编译您的代码。
...
表示范围是 GCC 特有的扩展。 - Keith Thompson
char
等类型是可以的,但如果你想要一个指针数组,你应该显式地将它们设置为NULL。荒谬的是,没有保证NULL表示为零字节。即使文字0
隐式表示空指针。 - Adrian Ratnapala