如何初始化指向nullptr c++的指针的动态数组
How to init dynamic array of pointers to nullptr c++
我有一个代码:
var *item[8] = { nullptr };
而且效果很好。但我需要动态地做这件事。这就是我尝试的:
int n = 8;
var **item;
item = new var*[n]();
item = { nullptr };
但这不起作用。区别在哪里?我该怎么办?
//对不起我的英语
item = new var*[n]();
中的()
将为您初始化指向nullptr
的所有指针,因此之后不需要手动执行此操作。
int n = 8;
var **item;
item = new var*[n](); // <-- all are nullptr here
实时演示
也就是说,你真的应该直接使用std::vector
而不是new[]
:
int n = 8;
std::vector<var*> item;
item.resize(n);
或者简单地说:
int n = 8;
std::vector<var*> item(n);
实时演示
无论哪种方式都应该初始化指向nullptr
的指针。但如果你想明确这一点,你可以这样做:
int n = 8;
std::vector<var*> item;
item.resize(n, nullptr);
int n = 8;
std::vector<var*> item(n, nullptr);
实时演示
如果你有一个数组、向量或容器,并且你想用一些值来填充它,那么你可以使用std::fill函数:
std::fill(item,item+n,nullptr);
然而,如果您想在初始化时分配nullptr,那就容易多了:您使用零初始化,就可以了。只需注意零和默认初始化之间的区别:
item = new var*[n]{}; //zero initialized (all elements would have nullptr as value)
item = new var*[n]; //default initialized (elements might not have nullptr as value)
item = new var*[n](); //default initialized until C++03
//zero initialized after C++03
无论如何,我建议您迁移到std::vector,而不是C风格的数组。您最终得到的代码通常不太容易出错。
相关文章:
- 如果非动态变量被指针引用,何时超出范围?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 指针的 C++ 动态数组 - 何时需要使用它?
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 指针类型类成员的动态强制转换的恒定性是什么?
- 删除包含包含动态对象的 STL 容器的智能指针
- 带有模板问题的指针的动态数组
- 存储指向动态数组元素的指针
- 动态维度数组的 C++ 别名指针
- 尝试创建指向动态分配的字符数组的指针
- 我如何用智能指针动态升起和降低
- 将指针添加到成员对象中的指针动态阵列
- 指针动态分配(核心倾倒)
- 如何在C++中增大和缩小双指针动态数组
- 指向指针数组的指针(动态分配)
- 使用指针动态数组同时输出整数值列表
- 从方法指针动态创建泛型函数指针,推导返回值和参数
- 使用指针动态分配数组
- 双指针动态分配
- 如何使用指针动态分配内存