看来小弟我数学不好,大家帮忙看看,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 }
}
------解决方案--------------------
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.