在这里,我在输入n之前声明数组长度。在数组声明时,n = 0。
#include <iostream>
using namespace std;
int main() {
int n;
int sum=0;
int arr[n]={};
cin >> n;
for(int i=0;i<n;i++) {
cin >> arr[i];
cout << arr[i];
}
return 0;
}
用于以下输入 6 1 2 3 4 5 6
我得到的输出是1234。
有人可以解释原因吗?
答案 0 :(得分:2)
在这里,我在输入n之前声明数组长度。
是的,但这不是有效的C ++。这是特定于编译器的扩展。参见Why aren't variable-length arrays part of the C++ standard?
在数组声明时n = 0。
错了。 n
尚未初始化,因此其中包含垃圾数据(可能为0)。读n
会引起未定义的行为。
即使n
为0,循环也会越界访问数组,并且再次调用未定义的行为。
讨论调用未定义行为的程序的输出是没有意义的-可能发生任何事情。唯一的理由是避免UB。一些好的做法可以做到这一点:
std::vector
代替纯数组/ VLA。