C语言中函数形参与实参的结合方式,c语言形参和实参,c语言中形参与实参,c语言形参实参,c语言中实参和形参,c语言中的实参和形参,c语言函数形参,函数的形参和实参,函数形参和实参,函数形参实参
《乌合木齐成人教育学院学报》(综合版) 2002 年第 2 期
C 语 言中函数形参与实参 的结合方 式
赵 一平
(乌鲁木齐成人教育学院 乌每木齐 830002)
摘 要 本人多次讲授(C 语言程序设计》的课程,发现学员对函数的形参与实参间如何交换数据往往搞不清楚,究其
原因与教材 中有关形参与实参结合方式的分类方法不无关系。在本文中通过对C 语言中形参与实参结合方式的分析. 给 出了
一种新 的分类方法 。
关键词 形参 实参 参数 传值调用 传地址调用 传名调用 指针
丁F乙D
C 语言程序是 由函数构成的,函数间需要交换数据 ,函数间交换数据的通道主要有三个: 一是函数 的返
回值 ,它一次能返 回一个值 ,且是单向的( 只能输 出) ,该函数与其他函数通过函数调用可以引用这个返 回值;
二是全程变量,它是一个双向的通道 ,函数可以引用它,也可以改变它,从而达到双向传递 的 目的,但 由于全
程变量在整个程序 中都可见 ,这对程序的维护与调试都非常不利 ,在结构化程序设计 中它是被 限制使用 的;
三是函数 的参数 ,它既可以是单 向的输人通道 ,又可以是双向的输人与输 出通道 ,它是函数间交换数据的最
主要的方式。所以C 语言中函数如何通过参数交换数据即形参与实参的结合方式是教学的一个重点内容,
同时由于形参与实参的结合方式的复杂性 ,它也是教学的一个难点。
C 语言函数形参与实参的结合方式从总的方面来看和其他高级语言无太大的区别. 无非是 “传值调用
(赋值调用) ”方式与 “传地址调用( 也称传名调用) ”方式两种 。 “传值调用”(赋值调用) 方式 : 函数在被调用时
系统为函数的参数分配存储单元 ,并把实参的值赋给它 ,形参与实参(若实参是变量) 是两个不同的变量 ,任
何对形参的修改都与实参无关; “传地址调用”( 也称传名调用) 方式 :在函数被调用时系统不给形参分配存储
单元 ,形参与实参共用一个存储单元 ,只是在函数 内部与外部用不 同的名称引用 ,当然对形参 的任何修改其
实就是对实参的修改。
从上面的概念来看 ,好象是很清楚 ,传“值调用 ”一定是单 向的输人通道 ,对形参的修改不会影响到外部 ,
而 “传地址调用 ”是一种双向传输通道 。一般高级语言确是如此 ,如 Pascal 语言:值参对应 “传值调用”; 变参
对应 传“地址调用”。下面分析一下C 语言巾形参与实参的结合方式 :
一、当数组作形参时,与之结合的实参一定是一个地址常量或是一个数组名(其实数组名也是地址常量)
或是一个指针变量 ,虽然这与 Pascal 变参只能与变量相结合是有 区别的,但它确实是 “传地址调用 ”,系统并
未为形参数组分配存储单元,形参与实参共用存储单元,且因形参数组名是常量是不能被修改的,能修改的
只有形参数组单元的值 ,其实就是实参的对应单元的值 。
二、一般变量( 指非数组或指针) 作形参时,与之结合的实参可以是与之匹配的变量或常量,系统为形参
分配新的存储单元用于存放实参的值,任何对形参的修改都与实参无关,这是 “传值调用”。
三、指针变量作形参时,与之结合的实参可以是与之匹配的指针变量或地址常量 ,系统为形参分配新 的
存储单元用于存放实参的值,这当然是 “传值调用”,但它传递的却是 “地址”值,我们来看几乎所有的C 语言
教材上都会举 的一个例 :
1. void swapl (in t - p l ,int ce p2 )
{ int - p ;
P = P l ;
P 1= p 2 ;
P2 0 P ;
2. void sw ap2 (int * p l , int ce p 2)
. 8 5 .