aus*_*ton 0 c null struct pointers 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;
}
Run Code Online (Sandbox Code Playgroud)
但是我的编译器告诉我:
error: statement with no effect
Run Code Online (Sandbox Code Playgroud)
指的是这条线 cxs[i] = NULL;
指针数组是否在C中自动初始化为NULL?如果不是我怎么能这样做?
您正在使用==运算符而不是=运算符.在实践中,不是分配NULL给cxs[i](如果使用赋值运算符将会执行的操作=),而是将每个元素与NULL这些比较的结果进行比较,从而丢弃编译器的警告.
请注意,您可以使用表示法更简单地初始化数组
struct mystructure * cxs[MAXNOCXS] = {};
Run Code Online (Sandbox Code Playgroud)
此语法告诉编译器默认初始化1数组的所有元素(因为括号,包含显式初始化器,为空),这意味着指针初始化为NULL,算术类型为0.
如果您的数组具有"静态存储持续时间"(即它是全局或static变量),则您不需要执行任何特殊操作,因为它已经默认初始化.
static变量,则将它们初始化为值(C99,§6.7.810,21).编辑
在阅读之后,似乎C标准与C++标准不同,它不支持空初始化器.不过,你总是这样做:
struct mystructure * cxs[MAXNOCXS] = {NULL};
Run Code Online (Sandbox Code Playgroud)
这将初始化第一个元素NULL,并让其他元素默认初始化(再次NULL).