在这里,我在为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。
有人能解释一下原因吗?
这里我在为n输入之前声明数组长度。
是的,但这不是有效的C++。它是编译器特定的扩展。请参阅为什么可变长度数组不是C++标准的一部分?
在数组声明n=0时。
这是错误的。n
尚未初始化,因此它包含垃圾数据(可能为0(。读取n
会调用未定义的行为。
即使n
为0,循环也会越界访问数组,并再次调用未定义的行为。
讨论调用未定义行为的程序的输出是毫无意义的——任何事情都可能发生。唯一的原因是避免UB。做到这一点的一些好做法:
- 始终将变量初始化为合理值
- 使用
std::vector
而不是普通阵列/VLA