c - 在 C 中初始化指向结构的指针数组

标签 c pointers struct null initialization

我有一个指向结构的指针数组。我想将数组中的每个元素初始化为 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 变量),您不需要做任何特殊的事情,因为它已经默认初始化。


  1. 如果它们是 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/

相关文章:

c++ - 在 C++ 中将指针传递给类

C - 我的内存释放功能有什么问题?

c - 手动为结构分配内存

c - 在两个函数中使用 Goto 函数

c - 这段代码中段错误的原因

c - 将参数传递给函数(int 到 size_t)

c - 如何使用 strcat() 连接字符串

c++ - C++中指向对象的指针

c++ - PROGMEM 中的 Arduino 结构数组

struct - 是否可以通过引用返回结构的一部分?