看来我数学不好,大家帮忙看看,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{
9int *ary,*t;
10int n;
11srand(time(NULL));
12cout<<"n= ";
13cin>>n;
14move(ary,n);
15for(t=ary;t<ary+n;t++)
16{
17*t=rand()%100+1;
18}
19
20for(t=ary;t<ary+n;t++)
21{
22cout<<*t<<"\t";
23}
24cout<<endl;
25ni(ary,n);
26for(t=ary;t<ary+n;t++)
27{
28cout<<*t<<"\t";
29}
30cout<<endl;
}31
31
33
vo34id move(int * & aaa,int len)
{35
36aaa=new int[len];
37if(aaa==NULL)
38{
39cout<<"SB";
40return ;
41}
42for(int i=0;i<len;i++)
43aaa[i]=0;
}44
45
46
vo47id ni(int * p,int n)
{48
49int temp,left=-1,right=n;
50while(left<=right)
51{
52temp=*(p+left);
53*(p+left)=*(p+right);
54 *(p+right)=temp;
55left++;
56right--;
57}
}
[解决办法]
#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.