易懂的数组作为函数参数(C语言)

易懂的数组作为函数参数(C语言)

易懂的数组作为函数参数(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

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

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

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

#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]);

}

相关阅读

365娱乐app官方版下载 狸窝DVD刻录软件如何用?

狸窝DVD刻录软件如何用?

bt365体育在线 手机朵唯

手机朵唯

365娱乐app官方版下载 流放之路塑界者国度任务 流放之路塑界者国度在哪里

流放之路塑界者国度任务 流放之路塑界者国度在哪里

365dots 玻璃防爆膜的价格真相,每平米究竟多少钱?

玻璃防爆膜的价格真相,每平米究竟多少钱?

365娱乐app官方版下载 倒车雷达声音小怎么办?

倒车雷达声音小怎么办?

365dots 什么是502 Bad Gateway错误以及如何解决(轻松修复指南)

什么是502 Bad Gateway错误以及如何解决(轻松修复指南)

365dots 110 美元 兑人民币 汇率。将 USD 兑换成 CNY

110 美元 兑人民币 汇率。将 USD 兑换成 CNY

bt365体育在线 2024年游戏行业十大代表性研发企业:腾讯、网易、世纪华通、巨人网络、米哈游……

2024年游戏行业十大代表性研发企业:腾讯、网易、世纪华通、巨人网络、米哈游……

bt365体育在线 CodeBlocks 20.03 汉化补丁使用指南

CodeBlocks 20.03 汉化补丁使用指南