数组在函数中的传值方法

数组在函数中的传值方法

我们如何让一个数组在函数中传值呢?你知道的方法有几种呢?不知道也没关系,首先我们来看一个例子

1 #include<stdio.h>
2 #define N 40
3 void ReadSocer(int socer[],int n);
4 int main(int argc, char const *argv[])
5 {
6   int n;
7   int socer[N];
8   scanf("%d",&n);
9   ReadSocer(socer,n);
10  return 0;
11 }
12
13 //读取学生的成绩
14
15 void ReadSocer(int socer[],int n)
16 {
17  int i=0;
18  for(i=0;i<n;i++)
19  {
20      scanf("%d",&socer[i]);
21  }
22 }

我们发现在main函数中有这样一段代码

ReadSocer(socer,n);

ReadSocer(),我们最开始定义的一个功能函数(这里我们强调一下如何命名一个函数,一般都采用Camel-Case命名规则!还有我们给函数起的名字一定要见名知意!),socer是什么呢?,回到函数的Line7,我们发现socer是我们定义的一个数组的名字,那么n是什么呢?同样,回到函数的Line8,n是从键盘获取的一个数字,这个数字是干嘛用的呢?printf告诉我们,“请输入学生总数”,所以这个数字代表着socer这个数组的长度!
通过这个例子我们知道,向函数传递一个数组的第一种方法是“不带方括号的数组名作为参数传递”

方法一:使用不带方括号的数组名作为参数传递(向函数传递数组首元素的地址)

  1. 传递的是数组的首地址
  2. 只复制一个地址自然比复制全部数据效率高
  3. 由于首地址相同,故实参数组与形参数组占用同一段内存
  4. 在调用函数内,不仅可以读这个数组的元素,还可以修改它们

方法二:数组元素作为函数实参
数组元素可以用做函数的实参,不能用作函数的形参,因为形参是函数被调用时临时分配的存储单元,不可能做为一个数组元素单独分配存储单元。数据传递的方式是从实参到形参,单向传递

方法三:通过定义全局变量进行传值
看一下下面这段代码

#include<stdio.h>
#define N 3
int socer[N];
void ReadSocer(int socer[],int n);
int main(int argc, char const *argv[])
{
    int n;
    scanf("%d",&n);
    ReadSocer(socer,n);
    return 0;
}

//读取学生的成绩

void ReadSocer(int socer[],int n)
{
    int i=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&socer[i]);
    }
}

对比后,我们发现 int socer[N]; 位置发生了变换,他从main 函数里面跑出去了,这一跑真可谓是鱼跃龙门,由当初的局部变量跳转成全局变量,原来只掌握巴掌大的一块小地方,现在的socer[N] 呢,掌握全局,无论在哪里,什么时候都可以用!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值