易懂的数组作为函数参数(C语言)
目录
- 易懂的数组作为函数参数(C语言)
- 1、数组做函数参数
- 2、通过形参数组修改数组元素
- 3、数组排序
1、数组做函数参数
(1)、若将一个数组作为实际参数传递给函数,只需不带方括号的数组名即可
若数组a的定义为:int a[10];
若要将数组a作为实参传递给被调用函数SumArr(),
则调用语句可写成:SumArr(a,10);
数组名代表数组首元素的地址,因此数组名做参数就可以将数组的起始地址传递给形参。另外需要将数组元素的个数也传递给被调用的函数。
函数SumArr()的函数原型如下:
int SumArr( int b[],int n )
//表示函数SumArr()期望用形参b来接收一个整型的数组,用形参n来接收数组元素的个数
程序1.1:调用函数SumArr()计算累加和
#include<stdio.h>
int SumArr(int arry[],int n);
int main()
{
int a[5] = {1,4,5,7,9};
//求数组a中前5个数的和
printf("%d\n",SumArr(a,5));
return 0;
}
int SumArr(int arry[],int n)
{
int sum = 0;
for(int i = 0;i < n;i++)
sum +=arry[i];
return sum;
}
(2)、形参数组与实参数组为同一数组
- 因为数组名是代表该数组的首地址,用数组名作实参时,是把实参数组的首地址赋给形参。
- 实际上形参数组和实参数组为同一数组,共同拥有一段内存空间。
(3)、参数声明
(1)、在声明形参数组时,数组元素的个数不需要写在方括号中,如:
int SumArr(int array[],int n)
{...}
//即便方括号中出现数字,编译器也将忽略该数字。在编译器看来,形参array不是一个真正的数组,只是一个可以存放地址的指针变量
(2)、向函数传递数组的时候,同时通过参数传递数组的元素的个数,有利于提高函数的通用性。
SumArr(a,5);//计算数组a的前5个元素之和
SumArr(a,3);//计算数组a的前3个元素之和
2、通过形参数组修改数组元素
一般变量作参数:传递的是数值,形参的值的改变不影响实参
数组做参数:传递的是数组的首地址,形参数组和实参数组实质上是同一块内存空间,形参数组发生改变,实参数组也随之发生改变。
程序2.1:通过调用函数ModifyArr(),将main()函数中数组a的每个元素变为原来的10倍。
a、通过函数修改数组元素
#include<stdio.h>
void ModifyArr(int arry[],int n);//每个元素变成10倍的函数原型
int main()
{
int i;
int a[5] = {1,2,3,4,5};
printf("原先的数组各元素分别是:\n");//未改变前输出
for(i = 0;i < 5;i++)
printf("%d\n",a[i]);
ModifyArr(a,5);//调用函数改变元素值
printf("变为原来的10的元素分别是:\n");//改变后输出
for(i = 0;i < 5;i++)
printf("%d\n",a[i]);
return 0;
}
void ModifyArr(int arry[],int n)
{
for(int i = 0;i < n;i++)
arry[i] *= 10;
}
b、把输出数组元素功能也包装成函数
#include<stdio.h>
void ModifyArr(int arry[],int n);//每个元素变成10倍的函数原型
void Print(int arry[],int n);//输出函数的原型
int main()
{
int i;
int a[5] = {1,2,3,4,5};
printf("原先的数组各元素分别是:\n");
Print(a,5);//调用输出函数
ModifyArr(a,5);//调用改变元素函数
printf("变为原来的10的元素分别是:\n");
Print(a,5);//调用输出元素
return 0;
}
void ModifyArr(int arry[],int n)
{
for(int i = 0;i < n;i++)
arry[i] *= 10;
}
void Print(int arry[],int n)
{
int i;
for(i = 0;i < n;i++)
printf("%d\n",arry[i]);
}
3、数组排序
给一个n个元素的数组进行升序,然后再依次输出:分别使用InputArr(),SortArr(),DispArr()实现数组的输入、排序、输出
#include<stdio.h>
#define N 20
void InputArr(int arry[],int n);//输入元素的函数原型
void SortArr(int arry[],int n);//排序函数原型
void DispArr(int arry[],int n);//输出函数的原型
int main(void)
{
int n;
int a[N];
printf("Please enter the integers number:\n");
scanf("%d",&n);
InputArr(a,n);//输入n个元素存入数组中
SortArr(a,n);//给n个元素进行升序
DispArr(a,n);//输出n个元素
return 0;
}
void InputArr(int arry[],int n)
{
int i;
printf("Please enter the numbers:\n ");
for(i = 0;i < n;i++)
scanf("%d",&arry[i]);
}
void SortArr(int arry[],int n)
{
int i;
int j;
int temp;
for(i = 0;i < n-1;i++)
{
for(j = i+1;j < n;j++)
{
if(arry[i] > arry[j])
{
temp = arry[i];
arry[i] = arry[j];
arry[j] = temp;
}
}
}
}
void DispArr(int arry[],int n)
{
int i;
printf("Please display the integers:\n");
for(i = 0;i < n;i++)
printf("%d\n",arry[i]);
}