请问这哪里错了呢,为啥输出是这个?

请问我写的这个 用函数实现将n个数按照输入顺序的逆序排列 哪里错了呢,为啥输出是这个?


#include 
using namespace std;
void inverse(int *p);
int main()
{
    int n;
    cout<<"输入数组元素的个数n"<>n;
    int arr[n];
    cout<<"输入你的数组"<>arr[n];
    int *p=arr;   
    for(int i=0;ifor(int i=0;ireturn 0;
}
void inverse(int *p)
{

//    int *a=arr;
    int n;
    int arr[n];
       int temp;
    for(int i=0;i2;i++)
    {
        temp=*(p+i);
        *(p+i)=*(p+n-1-i);
        *(p+n-1-i)=temp;
    }
     
}

img


#include <iostream>
using namespace std;
void inverse(int *p,int n);
int main()
{
    int n;
    cout << "输入数组元素的个数n" << endl;
    cin >> n;
    int arr[n];
    cout << "输入你的数组" << endl;
    // cin >> arr[n];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    int *p = arr;
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    cout << "逆置后" << endl;
    inverse(arr,n);//
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    return 0;
}
void inverse(int *p,int n)
{
    //    int *a=arr;
    //int n;
    // int arr[n];
    int temp;
    for (int i = 0; i <= n / 2; i++)
    {
        temp = *(p + i);
        *(p + i) = *(p + n - 1 - i);
        *(p + n - 1 - i) = temp;
    }
}

错误信息提示,显然程序崩溃掉了
函数参数要加一个数组长度才行。你现在定义了一个n,都没有赋值,也就是不知道数组长度,你咋逆置啊???

cin>>arr[n]只是输入了一个值给arr[n],但下标是0~n-1的并没想赋值(默认0)
可以用循环输入的方法处理,如
for(int i=0;i<n;i++){
cin>>arr[i];
}

另外,提醒一下,数组定义时,不要使用变量n来指定数组长度,一般用变量的编译都通过不了(这里虽然编译通过了),可以指定一个比较大的长度如arr[10000],后期学习深入后还有动态数组创建的方法,想了解的话可以网上搜搜