一、比较数组元素与数组名作函数参数 (数组元素作为参数)
值传递:当我们想要调用一个函数,并且将数组的某个传进去,那么我们推荐·1是使用值传递。
void swap( int x,int y )
{ int z;
z=x; x=y; y=z;
}
main( )
{ int a[2]={1,2};
swap(a[0],a[1]);
printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);
}
从代码很难去理解程序运行的真正过程,那么我们看一张原理图:
地址传递:当在函数中使用该数组,数组的改变也会影响到函数外的数组变量。
void swap( int x[] )
{ int z;
z=x[0]; x[0]=x[1]; x[1]=z;
}
main( )
{ int a[2]={1,2};
swap(a);
printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);
}
接下来我们看一道例题:有一维数组score,内放10个学生成绩,求平均成绩。
#include <stdio.h>
float average(int stu[10], int n);
void main()
{ int score[10], i;
float av;
printf("Input 10 scores:\n");
for( i=0; i<10; i++ )
scanf("%d", &score[i]);
av=average(score,10);
printf("Average is:%.2f", av);
}
float average(int stu[10], int n)
{ int i;
float av,total=0;
for( i=0; i<n; i++ )
total += stu[i];
av = total/n;
return av;
}
说到数组肯定少不了排序:数组排序。(选择排序)
所谓选择排序(以5个数为例)就是先将5个数中最小的数与a[0]对换;再将 a[1]到a[4]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个。共比较4轮。
那我们接下来看一遍代码是如何实现的吧:
#include<stdio.h>
int main()
{ int a[5],i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
sort(a,5);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
void sort(int array[],int n)
{ int i,j,k,t,min;
for(i=0;i<n-1;i++)
{ min=array[i];
k=i;
for(j=i+1;j<n;j++)
if(array[j]<min)
{k=j;min=array[j];}
t=array[i];
array[i]=array[k];
array[k]=t;
}
}
使用sort自定义函数,对每两个数字进行比较,通过for循环遍历数组的每一个元素,这里的传递参数就是值传递。