例10.9 用实参指针变量改写例10.7。
void inv(int *x,int n)
{intp,m,temp,*i,*j;
m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{temp=*i;*i=*j;*j=temp;}
return;
}
main()
{int i,arr[10],*p=arr;
printf("The original array:\n");
for(i=0;i<10;i++,p++)
scanf("%d",p);
printf("\n");
p=arr;
inv(p,10);/*实参为指针变量*/
printf("The array has been inverted:\n");
for(p=arr;p<arr+10;p++)
printf("%d",*p);
printf("\n");
}
注意,上面的main函数中的指针变量p是有确定值的。如果在main函数中不设数组,只设指针变量,就会出错,假如把程序修改如下:
main()
{int i,arr;
printf("The oriGinal array:\n");
for(i=0;i<10;i++)
scanf("%D",arr+i);
printf("\n");
inv(arr,10);/*实参为指针变量,但未被赋值*/
printf("The array haS Been inverteD:\n");
for(i=0;i<10;i++)
printf("%D",*(arr+i));
printf("\n");
}
编译时出错,原因是指针变量arr没有确定值,谈不上指向哪个变量。下面的使用是不正确的:
main()f(x[ ],int n)
{int *p; {
f(p,n);
…
…}
}
void inv(int *x,int n)
{intp,m,temp,*i,*j;
m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{temp=*i;*i=*j;*j=temp;}
return;
}
main()
{int i,arr[10],*p=arr;
printf("The original array:\n");
for(i=0;i<10;i++,p++)
scanf("%d",p);
printf("\n");
p=arr;
inv(p,10);/*实参为指针变量*/
printf("The array has been inverted:\n");
for(p=arr;p<arr+10;p++)
printf("%d",*p);
printf("\n");
}
注意,上面的main函数中的指针变量p是有确定值的。如果在main函数中不设数组,只设指针变量,就会出错,假如把程序修改如下:
main()
{int i,arr;
printf("The oriGinal array:\n");
for(i=0;i<10;i++)
scanf("%D",arr+i);
printf("\n");
inv(arr,10);/*实参为指针变量,但未被赋值*/
printf("The array haS Been inverteD:\n");
for(i=0;i<10;i++)
printf("%D",*(arr+i));
printf("\n");
}
编译时出错,原因是指针变量arr没有确定值,谈不上指向哪个变量。下面的使用是不正确的:
main()f(x[ ],int n)
{int *p; {
f(p,n);
…
…}
}