#include
using namespace std;
void inv(int *x, int n)
{ int *p, t, *i, *j, m=(n-1)/2;
i=x; j=x+n-1; p=x+m;
for (; i<=p; i++,j--)
{ t=*i; *i=*j; *j=t;}
}
int main( )
{ int i, n,a[n];
cout<<"输入个数:";
cin>>n;
for(i=0;i cin>>a[i];
inv(a,n);
for (i=0;i<n; i++)
cout<<a[i]<<" ";
return 0;
}
输入数字在五个以下的时候结果没问题,但是大于五个数字的时候结果就是错的,为什么啊?
错误原因:数组越界,或内存溢出。
错误说明:数组的两种创建方式。
你定义的数组的方式是n,即一个随机值,可能太大造成溢出,可能太小造成非法访问。
1:数组创建,在声明的时候就应该确定其内存大小,确定后不可改变。如 int a[100]。不能是你的这种方法。
2:动态分配,可以通过C语言的malloc,也可以通过c++的new一个指针,指针和数组一些方面可以等价使用。即在输入n后动态分配。int *a=NULL;cin>>n;a=new int[n];
int i, n,a[n];
不要这么写
因为你不知道n是多少
可以用
int i, n,a[100];