(C++) 检查指针数组中的空值
(c++) checking array of pointers for null value
我对指针初始化的概念理解停滞不前。
我创建了一个这样的数组:
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
}
- 复制几乎为空的数组的最快方法
- 尝试将对象插入空指针数组时出现分段错误
- 缩放和插值数组
- 从类型元组到通过调用模板函数返回的值数组
- 采用OpenCV Mat<doube>并转换为12位值数组。
- 如何将值数组从 json 文件读取到 c++ 数组
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 有没有办法在值数组中随机添加或减去两个特定数字或更多
- 生成随机值数组而不重复
- 在 OpenCV 中加载像素值数组
- 使用空指针数组时C++错误
- 使用布尔值数组"表达式必须具有指向对象类型的指针"错误C++
- 如何使用C Win32 API设置和获取多个值(数组值)到Active Directory中的单个属性
- C++返回一个空指针数组
- 如何在C++中将值数组转换为参数
- 有没有任何方法可以确定rgb值数组的宽度和高度
- c++如何创建一个现有char数组大小的空char数组
- 获取内存值数组的最快方法
- 传递指针数组并返回这些指针指向的值数组
- C++填充静态值数组