以下 C++ 程序打印的输出比我预期的要多。谁能解释为什么会这样?该程序尝试使用指针循环遍历整数数组,沿途打印每个值。
#include <cstdio>
using namespace std;
int main(int argc, char **argv) {
puts("hi");
int ia[5] = {1,2,3,4,5};
for (int *p = ia; *p; ++p) {
printf("Char is: %d\n", *p);
}
return 0;
}
/*
hi
Char is: 1
Char is: 2
Char is: 3
Char is: 4
Char is: 5
Char is: 32767
Char is: -811990796
Char is: -133728064
Char is: 1606416320
Char is: 32767
Char is: -1052593579
Char is: 32767
Program ended with exit code: 0
*/
原文由 none 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要有一个 0/NULL 值才能停止,目前您不需要。
您的循环条件将允许迭代,直到您获得一个评估为假的值(即 0)并且您的数组不包含该值,因此您的迭代将继续超出数组的边界,并且在访问某些内存时将在某个点退出它不应该。
有几种方法可以修复它。您可以将 0 添加到数组的末尾。
这个问题是你现在不能在你的数组中使用 0 ,否则它会提前终止。
给定数组长度,更好的方法是预先计算停止的地址。该地址是数组末尾的一个地址。
现在我们正在研究标准库迭代器使用的方法。现在模板可以推断出数组的大小。
IE
最后,基于范围的 for 也支持数组。