在我的数据结构课中,老师给了我们一个简单的代码,用于从带有循环的数组中打印元素。我声明了一个包含10个元素的数组,但初始化了15个元素,值为5,而不是打印15个元素,知道其余元素将显示垃圾值。但它只输出5个元素。事实上,它显示了我将数组初始化的元素数量。我正在使用代码块13.12。 提前谢谢。
#include <iostream>
using namespace std;
int main(){
int i,n;
int arr[10];
n=15;
for(i=0;i<n;i++){
arr[i] = 5;
}
for(i=0;i<n;i++){
cout << arr[i] << endl;
}
return 0;
}
答案 0 :(得分:1)
程序具有未定义的行为,因为数组外部的内存被覆盖。
这就是为什么在你的系统中程序仅输出5个元素的原因。在初始化数组时,变量n
在随后的循环中被值5覆盖。
//...
int arr[10];
n=15;
for(i=0;i<n;i++){
arr[i] = 5;
}
//...
答案 1 :(得分:0)
代码的行为未定义。通过推理它可能做什么,几乎没有什么可以获得的。只需修复数组大小。 (可能是其中一个越界写入覆盖了n
)的值。
答案 2 :(得分:0)
这种类型的代码产生未定义的行为 - 即行为未由标准定义的代码,因此编译器可以做任何他们想要的事情。不要这样做。未定义行为的其他示例包括
NULL
指针答案 3 :(得分:0)
C ++编译器不绑定检查数组大小。有时它会提供所需的输出,有时它会崩溃。这将导致未定义的行为。
你绝对应该避免它。
答案 4 :(得分:0)
这很难编写,只需很少的努力或研究。这是你的作业,至少花时间去做它。
这是一些小帮助,但不是全部:
#include <iostream>
using namespace std;
int main(){
int i,n;
int arr[10];
n=15;
int x;
for(i=0;i<n;i++){
arr[i] = x
cout << arr[i] << endl;
}
return 0;
}
要做到这一点,你需要做一些事情。我不会这样做的!