C++ 将指针数组初始化为NULL
这是我在这个网站上的第一篇帖子 我正在尝试初始化一个包含30个指针的数组为NULL。数组存储为全局数组,我在init()函数中进行初始化,如下所示:C++ 将指针数组初始化为NULL,c++,c,arrays,C++,C,Arrays,这是我在这个网站上的第一篇帖子 我正在尝试初始化一个包含30个指针的数组为NULL。数组存储为全局数组,我在init()函数中进行初始化,如下所示: static headerT*free_list[30] init(){ 自由列表[30]={NULL}; } 但是,我得到了以下编译器错误-“error:expected expression before'{'token” 有没有想过我会做错什么 提前谢谢 如果arr是一个由n个元素组成的数组,那么第一个单元格是arr[0],最后一个单元
static headerT*free_list[30]代码>
init(){
自由列表[30]={NULL};
}
但是,我得到了以下编译器错误-“error:expected expression before'{'token”
有没有想过我会做错什么
提前谢谢
如果arr
是一个由n个元素组成的数组,那么第一个单元格是arr[0]
,最后一个单元格是arr[29]
,arr[30]
在数组之外,引用它会导致各种问题
不能为整个数组赋值。请使用for
循环访问每个单元格
因此,我们得到:
init()
{
int i;
for(i=0; i<30; i++)
free_list[i] = NULL;
}
init()
{
int i;
对于(i=0;i分配了静态存储持续时间的对象,值已初始化。您的指针已初始化为nullptr
我更喜欢memset
memset(free_list,0x0,30*sizeof(headerT*);它们已经初始化。只需删除init()
函数。元素free_list[30]
不存在:数组从free_list[0]
到free_list[29]
在?或?中,默认情况下,只有具有静态存储持续时间的指针才会初始化为NULL
。您还可以通过写入T*p[30]={0}将指针(非静态)数组初始化为NULL(0);
,但您不能分配这样的值。如果空指针不是由all-bits-zero表示的系统,这将中断。如果列表大小发生变化,它也将中断,您至少可以使用习惯用法memset(&x,0,sizeof x)
以确保写入了正确的内存量。是的,我可以这样做,但给出的示例非常具体,我没有问题给出具体的答案。我为自己编写的这个函数的具体版本是模板化的,但我认为这对于这个问题来说太过分了。