>n; 对于(i=0;i>arr[i]; } 对于(i=n-1;i>-1;i--){ cout,c++,C++" /> >n; 对于(i=0;i>arr[i]; } 对于(i=n-1;i>-1;i--){ cout,c++,C++" />

为什么此代码可以';不能正确地反转数组 我编写了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
的定义

它有两个问题

  • 可变长度数组(VLAS)不是标准C++,它们是由编译器支持的扩展。
  • 在该行中,
    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。