看来小弟我数学不好,大家帮忙看看,49行left为啥要赋值为-1才行,小弟我原来是left=0,结果第一个数为一堆乱码?

看来我数学不好,大家帮忙看看,49行left为啥要赋值为-1才行,我原来是left=0,结果第一个数为一堆乱码???????
1#include<iostream>
2#include<cstdlib>
3#include<ctime>
4void move(int * & ary,int n);
5void ni(int * ary,int n);
6using namespace std;
7void main()
8{
9 int *ary,*t;
10 int n;
11 srand(time(NULL));
12 cout<<"n= ";
13 cin>>n;
14 move(ary,n);
15 for(t=ary;t<ary+n;t++)
16 {
17 *t=rand()%100+1;
18 }
19
20 for(t=ary;t<ary+n;t++)
21 {
22 cout<<*t<<"\t";
23 }
24 cout<<endl;
25 ni(ary,n);
26 for(t=ary;t<ary+n;t++)
27 {
28 cout<<*t<<"\t";
29 }
30 cout<<endl;
}31
31
33
vo34id move(int * & aaa,int len)
{35
36 aaa=new int[len];
37 if(aaa==NULL)
38 {
39 cout<<"SB";
40 return ;
41 }
42 for(int i=0;i<len;i++)
43 aaa[i]=0;
}44
45
46
vo47id ni(int * p,int n)
{48
49 int temp,left=-1,right=n;
50 while(left<=right)
51 {
52 temp=*(p+left);
53 *(p+left)=*(p+right);
54 *(p+right)=temp;
55 left++;
56 right--;
57 }
}



------解决方案--------------------
C/C++ code

#include<iostream>
#include<cstdlib>
#include<ctime>
void move(int * & ary,int n);
void ni(int * ary,int n);
using namespace std;
void main()
{
    int *ary,*t;
    int n;
    srand(time(NULL));
    cout<<"n= ";
    cin>>n;
    move(ary,n);
    for(t=ary;t<ary+n;t++)
    {
        *t=rand()%100+1;
    }
    for(t=ary;t<ary+n;t++)
    {
        cout<<*t<<"\t";
    }
    cout<<endl;

    ni(ary,n);
    for(t=ary;t<ary+n;t++)
    {
        cout<<*t<<"\t";
    }

    free(ary); //释放掉内存;
    cout<<endl;
}

void move(int * & aaa,int len)
{
    aaa=new int[len];
    if(aaa==NULL)
    {
        cout<<"SB";
        return ;
    }
    for(int i=0;i<len;i++)
        aaa[i]=0;
}
 

void ni(int * p,int n)
{
    int temp,left=0,right=n-1;//right应该为n-1,为n就越界了。
    while( left <= right)
    {
        temp=*(p+left);
        *(p+left)=*(p+right);
        *(p+right)=temp;
        left++;
        right--;
    }
}

------解决方案--------------------
本来 49行应该是 left=0 right=n-1;
你现在误打误撞写成 left=-1 ,right=n.能够成功但是很危险因为你把你数组外的头尾两个数字也做了交换。如果该两个值在后续程序中有意义则会导致问题。

所以你现在不应该纠结的是left=-1,而是考虑清楚right因该是n,还是 n-1.