当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > 数组名作函数的参数分析
数组名作函数的参数分析
时间:2016-12-14作者:华清远见

用c语言实现模块编程中,子函数的创建和调用我们经常使用,而子函数的传参问题,一直是困扰新学者的一块内容,尤其是使用传参问题和数组类型和指针类型结合到一块,更是让许多新学者纠结,今天就让我们来理一理,做个小结。

(一) 形参和实参

在函数定义时,参数列表中的叫做形式参数,简称形参。在函数的调用过程中,参数 表中的参数叫实际参数,简称实参。

例如在下面的程序中,变量num1和num2叫做形参,变量a和b叫做实参。

形式参数num1和num2只用在调用min函数的时候才会被创建,分配相关的寄存器或者内存单元,在min函数执行结束返回的时候,num1和num2变量被释放。因此,形参只有在函数内部有效,不能通过形参变量名从子函数直接带回到主函数。

实际参数 a 和 b 是在主函数已经定义了,分配了内存单元,在进行函数调用时,它们都具有了确定的值,直接把这些值,对应传递给形参num1和num2。实参可以是常量、变量、表达式、函数等。

(二)实参和形参的值传递

实参和形参传递,首先要是类型匹配,这是C语言的基本规则,其次实参和形参的传递方向是单向的值传递,下面我们通过例子,重点理解下,单向和值传递。

执行结果:

我们来分析下,例子中func函数实现的功能是num1和num2变量值的交换。

在主函数中定义了两个变量int a=100和int b =200,调用func函数,带入的实参是定义和初始化好的变量a和b。调用func函数的同时系统定义了局部变量num1和num2,执行的是num1 = a 和num2 = b的赋值语句。实参变量并没有进入子函数中,把值付给了形参变量。这就是所说的值传递。

在子函数的执行过程中,交换的是局部变量num1 和 num2 的值,并没有改变 变量 a 和b 的值。子函数返回时,num1和num2局部变量直接释放,没有传回给变量a和b,这就是所说的单向。所以,我们程序的执行结果是变量a和b的值并没有实现交换。

(三)数组名作函数的参数

数组名作函数的参数时,我们知道数组名实际是数组首元素的地址,,当数组名作函数参数时,实参与形参之间传递的值不是变量的值,而是变量的地址。 实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元,编译系统不再为形参数组分配存储单元,数组名退化为指针。

我们来看下面的例子,由于是地址的传递,在子函数中是通过形参间接访问,改变了实参的值。

执行结果:

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)