AnT*_*AnT 40
要在构造函数初始值设定项列表中设置指向空值的指针数组,可以使用()
初始值设定项
struct S {
int *a[100];
S() : a() {
// `a` contains null pointers
}
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,在当前版本的语言中,()
初始化程序是唯一可以与构造函数初始化程序列表中的数组成员一起使用的初始化程序.但显然这就是你需要的东西.
在()
对与分配的数组一样的效果new[]
int **a = new int*[100]();
// `a[i]` contains null pointers
Run Code Online (Sandbox Code Playgroud)
在其他上下文中,您可以使用{}
聚合初始值设定项来实现相同的效果
int *a[100] = {};
// `a` contains null pointers
Run Code Online (Sandbox Code Playgroud)
请注意,绝对不需要挤压一个0
或NULL
两个之间{}
.空的一对{}
会很好.
通常,默认情况下不会初始化数组,但是如果您显式初始化一个或多个元素,则任何剩余元素都将自动初始化为 0。由于 0NULL
是等效的,因此您可以NULL
像这样初始化指针数组:
float * foo[42] = { NULL }; // init array of pointers to NULL
Run Code Online (Sandbox Code Playgroud)
您可以从数组切换到std::vector
使用
std::vector<T*> v(SIZE);
Run Code Online (Sandbox Code Playgroud)
值将NULL
自动初始化为s.这是首选的C++方式.
更新:从C++ 11开始,还有一种方法:使用
std::array<T*, SIZE> array = {};
Run Code Online (Sandbox Code Playgroud)
这更像是C样式数组的更正版本(特别是避免动态分配),它的大小包含并且不会衰减到指针.但是,需要在编译时知道大小.