我对指针初始化的概念理解停滞不前。
我创建了一个这样的数组:
int *A = NULL;
A = new int[p];
现在尝试模拟插入值这个数组,A。 这是问题所在,想象一下数组是否已经放置了一些值。
例如:
A[0]= 10;
A[1]= 4;
A[2]= NULL;
A[3]= 2;
如何约束 if 语句来检查数组是否为空?
用 i 遍历数组值并检查
if(A[i] == NULL){
cout << "hello";
}
永远不会打印那个?
但是!如果我初始化数组然后执行此操作。
int *A;
A = new int[p];
for (int i = 0; i < p; i++) {
A[i] = 0;
}
它将允许我捕获该 NULL 值并执行我的操作。
int *A = {0}; 有什么区别? (目前不为我工作)
并循环遍历,将每个值分别设置为 0?
最佳答案
A
的每个元素的类型是一个 int
.使用 NULL
意义不大作为 int
的元素, NULL
与指针文字值更多相关;尽管从 C++11 开始,nullptr
代表那个。
除非您愿意为“未设置”使用粗略的“魔法值”int
, 考虑使用 std::vector<boost::optional<int>>
作为 A
的类型.然后您可以判断某个元素是否已明确设置。
boost::optional
正在作为 std::optional
发布到 future 标准 (C++17) 中,所以在适当的时候重构它。 (C++17 之前的另一种方法是从 future 的 C++ 标准库中借用源代码:std::optional
在 C++11 之后的版本中很容易实现。)
引用资料:
http://en.cppreference.com/w/cpp/utility/optional http://www.boost.org/doc/libs/1_61_0/libs/optional/doc/html/index.html
关于c++ - (c++) 检查指针数组的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46765628/