我有一个指向结构的指针数组。我想将数组中的每个元素初始化为 NULL。我将使用此数组动态添加和删除条目,因此我希望能够针对 NULL 进行测试以查看该索引是否为空。
我试着这样做:
struct mystructure *cxs[MAXNOCXS];
int cx_init(void)
{
int i = 0;
for (i=0; i<MAXNOCXS; i++)
cxs[i] == NULL;
return 0;
}
但是我的编译器告诉我:
error: statement with no effect
引用行 cxs[i] = NULL;
在 C 语言中,指针数组会自动初始化为 NULL 吗?如果不是,我该怎么做?
最佳答案
您正在使用 ==
运算符而不是 =
运算符。在实践中,不是将 NULL
赋给 cxs[i]
(如果您使用赋值运算符 =
,它会这样做)您是将每个元素与 NULL
进行比较并丢弃此类比较的结果,因此您的编译器会发出警告。
请注意,您可以使用以下符号更简单地初始化数组
struct mystructure * cxs[MAXNOCXS] = {};
此语法告诉编译器默认初始化1 数组的所有元素(因为包含显式初始化程序的大括号为空),这意味着指针被初始化为 NULL
和算术类型为 0。
如果您的数组具有“静态存储持续时间”(即它是一个全局或 static
变量),您不需要做任何特殊的事情,因为它已经默认初始化。
- 如果它们是
static
变量(C99,§6.7.8 ¶10,¶21),则为它们将被初始化的值。
编辑
仔细阅读后,C 标准似乎与 C++ 标准不同,它不支持空初始化器。不过,您始终可以:
struct mystructure * cxs[MAXNOCXS] = {NULL};
这将使用 NULL
初始化第一个元素,并让其他元素默认初始化(再次为 NULL
)。
关于c - 在 C 中初始化指向结构的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5863269/