就是说“数组作为函数的形参”实际上是一个指针类型的形参,即将来可以接受一个数组名表示的数组的起始地址!而并不是将一个数组的所有元素传给一个函数,仅仅传递的是一个小小的指针变量。
比如,我们可定义下面的函数,第一个参数表示可以接受一个传入的数组
double getAverage(int arr[], int size)
{
int i;
double avg;
double sum = 0;
for (i = 0; i < size; ++i) {
sum += arr[i];
}
avg = sum / size;
return avg;
}
#include <stdio.h>
/* 函数声明,表示存在这种格式的函数getAverage, 其第一个参数可以是一个int型数组,第二个参数是这个数组的大小 */
double getAverage(int arr[], int size);
int main () {
/* 5个元素的int整型数组 */
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
/* 将数组名(实际是数组对应内存块的起始地址)传给getAverage函数 */
avg = getAverage( balance, 5 ) ;
/* 输出getAverage的返回值 */
printf( "Average value is: %f ", avg );
return 0;
}
举个栗子:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int os(int a[],int n)
{
int ans=0,i;
for(i=0;i<n;i++)
{
if(a[i]%2==0)//偶数
ans++;
}
return ans;
}
int js(int a[],int n)
{
int ans=0,i;
for(i=0;i<n;i++)
{
if(a[i]%2!=0)//奇数
ans++;
}
return ans;
}
int main()
{
int n;
scanf("%d",&n);
int a[n];
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int s;
int j;
s=os(a,n);//注意 s=os(a[n],n)是错误的。
j=js(a,n);
printf("偶数个数%d\n",s);
printf("奇数个数%d",j);
return 0;
}