a[]是一个静态数组,在初始化的时候已经固定了它的范围,所以报错,是内存错误,即超界了,这答题最佳的做法是用动态数组,即指针来动态分配大小,我下面的代码是根据你的程序改的,用了一个int *c指针变量过度,你可以参考我这个思想把a去掉,需要的话,我可以把最佳版本写给你。
#include
#include
int main()
{
void fun(int a[],int x,int n);
int a[]={1,3,5,7,9,16,19},*c=a;
int i,b;
scanf("%d",&b);
c=(int *)malloc(sizeof(a)/sizeof(int)+1);
for(i=0;i<7;i++)
c[i]=a[i];
fun(c,b,8);
for(i=0;i<=7;i++)
printf("%d\t",c[i]);
return 0;
}
void fun(int a[],int x,int n)
{
*(a+n-1)=x;
}
注意数组的开始下标是0,结束下标是长度-1,因此边界是a[7]是非法表示,会出现错误,下面是更改后的程序
#include
int main()
{
void fun(int a[],int x,int n);
int a[]={1,3,5,7,9,16,19};
int i,b;
scanf("%d",&b);
fun(a,b,7);//边界是7
for(i=0;i<7;i++)//不能等于7
printf("%d\t",a[i]);
return 0;
}
void fun(int a[],int x,int n)
{
*(a+n-1)=x;
}
fun函数里,*(a+n1) = x;是什么意思,有没有写反?