【发布时间】:2018-03-27 16:45:11
【问题描述】:
我对指针初始化的概念理解停滞不前。
我已经创建了一个这样的数组:
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?
【问题讨论】:
-
您的数组包含
int值,请勿将NULL与它们一起使用。实际上在 C++ 中一般不要使用NULL,而是在处理指针时使用nullptr。 “如果我初始化数组,那么就这样做。”做什么?您的代码 sn-p 仅显示数组初始化。你应该提供mcve -
为
int类型定义“unfilled”是什么意思?您的数组不包含指向ints 的指针,它包含ints。 -
“我应该用向量来代替吗?”大概。老实说,“想象一下,如果数组已经放置了一些值。”并没有真正的意义,为什么这些值不连续,这些值来自哪里?等等...如果您想在迭代中隐藏某些值,那么只需分配那些“隐藏”值
-1并跳过它们。 -
谢谢大家的回复。这让我意识到我的实际问题应该是。 “有什么方法可以让我在不实际输入“-1”或 0 之类的数字的情况下查看哪些值是“空”的?对于实际输入值 0 或 -1 的奇怪情况。
-
解决方案会因具体情况不同而有所不同,但通用的解决方案是使用
boost::optional<int>或自己滚动,如果你觉得懒惰,你也可以创建一个强大的数组句柄并检查它们是否为空std::vector<std::unique_ptr<int>>。
标签: c++ arrays pointers null initialization