(C++) 检查指针数组中的空值



我对指针初始化的概念理解停滞不前。

我创建了一个这样的数组:

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被发送到未来的标准(C++17)中,因此请在适当的时候重构。(C++17 之前的另一种方法是从未来的 C++ 标准库中借用源代码:std::optional在 C++11 以后很容易实现。

引用:

http://en.cppreference.com/w/cpp/utility/optionalhttp://www.boost.org/doc/libs/1_61_0/libs/optional/doc/html/index.html

在 C++11 及更高版本中,建议避免new/delete 。我建议使用适当的容器,例如 std::vector<int> .使用 std 容器时,无需进行 NULL 检查。

如果此容器不能满足您的需求,std::unique_ptr仍然是比原始指针更好的选择。

C++ 允许您使用以下语法"值初始化"数组-

new int[size]()

根据 ISO C++03 5.3.4 [expr.new]/15-

创建类型 T 的对象的新表达式按如下方式初始化该对象:如果新初始值设定项的格式为 (),则该项为值初始化 (8.5)

使用上述方法,您可以修改代码,如下所示-

int *A = NULL;
A = new int[p]();
if(A[i] == 0){
  //do whatever
}

相关内容

  • 没有找到相关文章

最新更新