【函数中数组的传递】

技术名词

2.怎样理解函数中数组的传递?

  首先要明确的是:被调用函数中作为形参接收到的数组,就是函数调用时被作为实参的数组。

对接受到的数组元素进行的修改,也会反映到调用时传入的数组中。

举个例子,我们在列出#include<stdio.h>头文件的前提下,定义了一个函数int search(int v[],int n).//n代表我们所要处理的元素个数。并在此函数下针对数组v进行了一系列查找操作,最终返回一个整形值。然后在main函数里,我们也设一个数组v[number(数字)]//在不同的函数中设出的标识符可以相同。 在main函数里执行search(v,number),此时我们可以把这两个函数想象成A,B两个工厂,在main函数中(B厂)我们想要对v进行查找,但是需要A厂的协助,我们要把数组v这批货运到A厂中加工,完工后最后再运回来,也就是说,当程序运行到search(v,number)这一行时,程序会跳转到search函数中执行,返回我们所要找的结果,这批货就加工完成了,接下来程序会把这批加工好的货运回到main函数继续刚才的步骤执行。

  运货即传递,哈哈哈

技术细节

  • 光说不练假把式,直接上代码!
  • #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    
    #define NUMBER 5
    
    //返回元素个数为n的数组v中的最大值
    
    int max_of(int v[], int n)
    {
    	int i;
    	int max = v[0];
    
    	for (i = 1; i < n; i++)
    		if (v[i] > max)
    			max = v[i];
    	return max;
    }
    int main()
    {
    	int i;
    	int eng[NUMBER];//英语分数
    	int mat[NUMBER];//数学分数
    	int max_eng, max_mat;
    	printf("请输入%d名学生的分数:\n");
    	for (i = 0; i < NUMBER; i++)
    	{
    		printf("[%d]     英语:", i + 1); scanf("%d", &eng[i]);
    		printf("         数学:" ); scanf("%d", &mat[i]);
    	}
    	max_eng = max_of(eng,NUMBER);
    	max_mat = max_of(mat, NUMBER);
    	printf("英语最高分是%d\n", max_eng);
    	printf("数学最高分是%d\n", max_mat);
    
    	return 0;
    }

       首先这段代码的目的就是求出英语和数学的最高分,为了迎接main函数中的“货物”,max_of这个厂家要先做好准备,设好形参数组v[]和元素个数n,先假设最大值max是v[0],在利用for循环从v[1]依次遍历到v[n],遍历期间如果遇到比刚才设的max还大,就将其赋给max,遍历结束后的max就是数组v中的最大值了,然后返回max即可。

  •   在main函数中,数组eng和mat分别储存英语和数学的分数,max_e和max_m分别代表英语和数学的最高分,max_of(eng,NUMBER)和max_of(mat,NUMBER)分别返回英语和数学的最高分,再分别赋给max_e和max_m即可。

注意

     int max_of(int v[],int n)

接收数组的形参的声明为“类型名 参数名[]”,使用别的形参(这里是n)来接收元素的个数。

另外,调用函数是使用的实参,只要写明数组的名称就可以了。我们可以像下面这样理解

在main函数中传递数组eng或者mat给函数mat_of,函数max_of使用v来接收这个数组。

因此,函数调用表达式max_of(eng,NUMBER)中,v[0]代表eng[0]的内容,v[1]代表eng[1]的内容。

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值