您的位置:首页 > 编程语言 > C语言/C++

数组作为函数参数

2017-04-23 23:23 211 查看
数组作为函数参数

1.数组元素作函数实参

  数组元素可以做函数实参,不能做形参。因为形参是在函数被调用时临时分配存储单元的,不能作为一个数组元素单独分配存储单元(数组是一个整体,在内存中站连续的一段存储单元)。数组元素做实参时,把实参的值传给形参,是“值传递”方式。数据传递的方向是从实参传到形参,单向传递。

eg:输入十个数,要求输出其中值最大的元素和该数是第几个数。

#include<stdio.h>
int main()
{
int max(int x,int y);
int a[10],m,n,i;
printf("enter 10 integer numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=0,m=a[0],n=0;i<10;i++)
{
if(max(m,a[i])>m)
{
m=max(m,a[i]);
n=i;
}
}
printf("The largest number is %d\nit is the %dth number.\n",m,n+1);
}
int max(int x,int y)
{
return (x>y?x:y);
}
函数调用过程中注意:
调用结束,形参单元被释放。实参单元仍保留并维持原值没有改变。如果在执行一个被调用函数时,形参的值发生改变,不会改变主调函数的实参的值。
2.数组名做函数参数
数组名做函数参数时,向形参(数组名或指针变量)传递的是数组首元素的地址。
eg1:有一个一维数组score,内放10个学生的成绩,求平均成绩。#include<stdio.h>
int main()
{
float average(float array[]);
float score[10],aver;
int i;
printf("input 10 score:\n");
for(i=0;i<10;i++)
scanf("%f",&score[i]);
printf(
4000
"\n");
aver = average(score);
printf("average score is %5.2f\n",aver);
return 0;
}
float average(float array[])
{
int i;
float aver,sum = 0;
for(i=0;i<10;i++)
sum = sum+array[i];
aver = sum/10;
return(aver);
}
分析:

a.数组名做函数参数时,在主调函数和被调函数分别定义数组,如array是形参数组名,score为是参数组名。

b.实参数组与形参数组类型应一致。

c.形参数组首元素(array[0])和是参数组首元素(score[0])具有同一地址,它们共占同一存储单元,score
和array
指的是同一单元。score
和array
具有相同的值。

eg2:两个班级,分别有不同的学生人数,调用一个average函数,分别求这两个班学生的平均成绩。

为简化,设两个班学生数分别为5和10。

#include<stdio.h>
int main()
{
float average(float array[],int n);
float socre1[5] = {98.5,97,91.5,60,55};
float socre2[10] = {67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5};
printf("The average of class A is %6.2f\n",average(socre1,5));
printf("The average of class B is %6.2f\n",average(socre2,10));
return 0;
}
float average(float array[],int n)
{
int i;
float aver,sum = 0;
for(i=0;i<n;i++)
sum = sum+array[i];
aver = sum/n;
return(aver);
}

数组名做函数实参时,是把首元素的地址传递给形参数组,此时这两个就共占同一段内存

假若改变了b[0]的值,也就意味着a[0]的值也改变了。形参数组中各元素值如发生变化会使形参数组元素的值同时发生变化例如下题:

用选择法对数组中10个整数按由小到大排列(即冒泡排序法)。

#include<stdio.h>
int main()
{
void sort(int array[],int n);
int a[10],i;
printf("enter array:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("The sorted array:\n");
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;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k = j;
t = array[k];
array[k] = array[i];
array[i] = t;
}
}

形参数组改变也使是参数组随之改变。

3.多维数组名作函数参数

eg:有一个3*4的矩阵,求所有元素中的最大值

#include<stdio.h>
int main()
{
int max_value(int array[][4]);
int a[3][4] = {{1,9,5,7},{2,4,12,38},{15,17,34,12}};
printf("Max value is %d\n",max_value(a));
}
int max_value(int array[][4])
{
int i,j,max;
max = array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)
max = array[i][j];
return (max);
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息