用数组名作函数参数时,数组名代表该数组首元素的地址,形参应该是一个指针变量。C编译都是将形参数组名作为指针变量来处理的。
int main()
{ void fun(int arr[],int n];
int array[10];
……
fun (array,10);
return 0;
}
void fun(int arr[ ],int n) // 相当于:void fun(int *arr,int n)
{ …… }

例:将数组a中n个整数按相反顺序存放。
参考代码:
#include <stdio.h>
int main()
{ void inv(int x[ ],int n);
int i, a[10]={3,7,9,11,0,6,7,5,4,2};
for(i=0;i<10;i++) printf(“%d ”,a[i]);
printf("\n");
inv(a,10);
for(i=0;i<10;i++) printf(“%d ”,a[i]);
printf("\n");
return 0;
}
void inv(int x[ ],int n)
{ int temp,*i,*j;
i=x; j=x+n-1;
for( ; i<j; i++,j--)
{ temp=*i; *i=*j; *j=temp; }
}
一维数组名可以作为函数参数,多维数组名也可作函数参数。
用指针变量作形参,以接受实参数组名传递来的地址。
可以有两种方法:
①用指向变量的指针变量
②用指向一维数组的指针变量
例:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。
解题思路:
(1)函数average求总平均成绩,用指向数组元素的指针作参数(列指针)。
(2)函数search找出并输出第i个学生的成绩,用指向一维数组的指针变量作参数(行指针)。
参考代码:
#include <stdio.h>
int main()
{ void average(float *p,int n);
void search(float (*p)[4],int n);
float score[3][4]={{65,67,70,60},
{80,87,90,81},{90,99,100,98}};
average(*score,12);
search(score,2);
return 0;
}
void average(float *p,int n)
{ float *p_end;
float sum=0,aver;
p_end=p+n-1;
for( ;p<=p_end; p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search(float (*p)[4],int n)
{ int i;
printf("The score of No.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
printf("\n");
}

