我已经编写了此C ++代码来反转数组。但是它给出了错误的输出。为什么??
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,i,a,arr[n];
cin>>n;
for(i = 0; i<n; i++){
cin>>arr[i];
}
for(i = n-1;i>-1;i--){
cout<<arr[i]<<" ";
}
}
答案 0 :(得分:4)
您的代码具有未定义的行为。不要指望任何特定行为。
问题是vue create ...
的定义。
它有两个问题。
arr
在使用前未初始化为值。通过为n
中的n
分配一个值,数组的大小不会自动更改。为cin >> n
使用std::vector<int>
,您的代码应具有可预测的行为。
arr
PS
请勿使用int main(){
int n,i,a;
cin>>n;
std::vector<int> arr(n);
for(i = 0; i<n; i++){
cin>>arr[i];
}
for(i = n-1;i>-1;i--){
cout<<arr[i]<<" ";
}
}
。有关详细信息,请参见Why should I not #include <bits/stdc++.h>?。
答案 1 :(得分:-1)
它不起作用,因为在您写int n, arr[n]
时,n
尚未分配值。
将cin>>n
放在int arr[n]
之前,它将可以正常工作。
答案 2 :(得分:-3)
编辑:https://stackoverflow.com/a/58756962/12335228更快。 Edit2:正如评论所暗示的那样,我对n初始化为零的假设确实是错误的。
哦?您说的输出错误?它对我有用,即使它不应该。 虽然逻辑是正确的,但是您完全可以进入未定义的行为领域:
您要声明n,然后声明arr [n]而不给n分配实际值。这意味着在int为0的情况下,n具有其默认值。因此,数组的容量为0。
无论如何,C ++还是让您编写代码,因为您作为程序员对内存负责。在这种情况下,只需将[]运算符视为(* arr + i)的语法糖,即您的数组+ i的地址