我是 C++ 新手。下面是输入和显示数组的代码——很容易理解事物的工作原理。
int main() {
int N, i;
int A[N];
cin >> N;
for (i = 0; i < N; i++) {
cin >> A[i];
}
for (i = 0; i < N; i++) {
cout << A[i];
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输入是:
4
1 2 3 4
Run Code Online (Sandbox Code Playgroud)
输出是:
12
Run Code Online (Sandbox Code Playgroud)
我已将我的代码更正为:
int N, i;
cin >> N;
int A[N];
Run Code Online (Sandbox Code Playgroud)
这可以正确显示数组。
究竟发生了什么?在初始化 A[N] 之前 N 应该有一个值吗?但为什么我最初的代码不起作用呢?这与等级制度有关吗?如果是这样,我怎样才能正确处理我的优先事项?
如果N初始化为一个大值,那么N接下来会有一个特定数字的输入,如果这样的话,为什么即使N=9,输出仍然是相同的:12?
来回答你的问题。
int N, i;
Run Code Online (Sandbox Code Playgroud)
在这里,您声明N,但因为您没有为 赋值N,N因此未初始化并且可以保存任何值(可能是某些旧程序的值)。并且您使用 来创建一个数组N,这将导致一些意外的行为。(例如N太大时可能会发生堆栈溢出)
和:
C++ 中数组的大小必须在编译时已知。这意味着当编译器编译程序时,必须知道数组的大小。
就您而言,您在运行时n知道(大小),这意味着只有当您运行程序时,您才知道 的值,即大小。n
您的代码运行是因为(可能)gcc编译器确实有一个扩展可以实现这种情况,但因为这不是标准 C++,所以我建议不要使用它。
C++ 有一个运行时数组的解决方案,位于标头std::vector中<vector>。
你只需要改变:
cin >> N;
int A[N];
Run Code Online (Sandbox Code Playgroud)
到:
std::cin >> n;
std::vector<int> A(N);
Run Code Online (Sandbox Code Playgroud)
注意:using namespace std;不好,所以不要使用它。
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |