为什么此代码可以';不能正确地反转数组 我编写了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]<<" "; } } #包括 使用名称空间std; int main(){ int n,i,a,arr[n]; cin>>n; 对于(i=0;i>arr[i]; } 对于(i=n-1;i>-1;i--){ cout
您的代码有未定义的行为。不要指望任何特定的行为为什么此代码可以';不能正确地反转数组 我编写了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]<<" "; } } #包括 使用名称空间std; int main(){ int n,i,a,arr[n]; cin>>n; 对于(i=0;i>arr[i]; } 对于(i=n-1;i>-1;i--){ cout,c++,C++,您的代码有未定义的行为。不要指望任何特定的行为 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]<<" "; } } 问题在于a
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]<<" ";
}
}
问题在于arr
的定义
它有两个问题
n
在使用前未初始化为值。通过在cin>>n
中为n
赋值,数组的大小不会自动改变arr
使用std::vector
,您的代码应该具有可预测的行为
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]<<" ";
}
}
intmain(){
int n,i,a;
cin>>n;
std::向量arr(n);
对于(i=0;i>arr[i];
}
对于(i=n-1;i>-1;i--){
查看详细信息。编辑:更快。
编辑2:正如评论所暗示的,我认为n是零的假设确实是错误的
哦?你说的输出不对?它对我有效,即使它不应该。
虽然逻辑是正确的,但您在这里已经进入了未定义的行为领域:
您先声明n,然后声明arr[n],而不为n指定实际值。这意味着在int 0的情况下,n有其默认值。因此数组的容量为0
C++还是让我们写进去吧,因为作为程序员,你要对你的内存负责。在这种情况下,只要把[]操作符看作(*arr+i)的语法糖,意思是数组的地址+i它不起作用,因为当你写int n时,arr[n]
,那时n
还没有赋值。
将cin>>n
放在int-arr[n]
之前,它将正常工作。“它给出了错误的输出。您的输入和预期输出是什么?实际输出是什么?这两个部分都是a的基本部分。int-n,i,a,arr[n]
您用于数组的n
的值是多少?数组的大小在创建后是固定的。您认为创建arr[n]
时n
等于什么?更不用说可变长度数组(编译时大小未知)不在标准C++中,而应该使用<代码> STD::vector < /Cord>。也请参阅“这意味着n有默认值,在int 0的情况下”-这是不正确的。<代码> n>代码>具有不确定的值,而不是0。