函数的参数及其传递方式教学方法的探讨

时间:2022-10-11 02:37:26

函数的参数及其传递方式教学方法的探讨

摘要:在C语言和数据结构的程序设计中,不同的参数类型,其有着不同的传递方式。值传递和地址传递非常容易混淆,不好理解,容易出错。该文就值传递和地址传递的教学方法分别进行探讨。

关键词:参数;值传递;地址传递

中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2014)09-1952-02

函数是面向过程的程序设计中的基本组成部分,多个函数像搭积木一样进行叠放之后就能构成程序,这也正是模块化程序设计的特点。程序要想执行其对应功能时,通过函数间相互调用来实现,这就如同上下级或同事间的一个电话,将任务在电话中说明,对应的函数就会执行其对应的功能,之后再将执行结果反馈给打来电话的上机或平级,打来的电话内容其实就是传递来的参数,而打回去的电话信息就是函数调用后的返回值。电话打给不同的人,执行任务的结果不一定完全相同,因此,正确理解函数中的各个概念,对比和总结函数参数传递的规律或原则,是正确进行程序设计、函数调用的前期保障,也是程序设计和开发成功的关键。该文重点探讨程序设计中函数的参数及其传递方式的教学方法。

1 参数的类型不同,其传递方式也不完全相同

参数分为形式参数和实际参数两类。形式参数简称形参,是在定义函数时,函数名后面小括号内的参数,称为被调函数中的参数。实际参数简称实参,是在调用函数时,函数名后面小括号内的参数,称为主调函数中的参数。在函数调用时,主调函数调用被调函数如同给被调函数播去电话,与此同时就将实参传递给了形参,然后执行被调函数的函数体。总体上看,参数的传递方式分为两种:值传递和地址传递。值传递是指形参和实参分别占用不同的存储单元,只能将实参的值传递给形参,而不能将形参的值传递给实参,形参值的改变不影响与其对应的实参。地址传递是指实参和形参实际上占用同样的存储区域,在函数调用时,是把实参的起始地址传递给形参。换句话说,形参中某元素的改变,将直接影响到与其对应的实参中的元素。在做题时,值传递和地址传递非常容易混淆,不好理解,容易出错。

2 值传递和地址传递方式的对比教学法

2.1 基本数据类型作为函数参数

C语言中的基本数据类型有四种,即字符型、整型、和单、双精度浮点型。当它们作为函数参数时,实参和形参之间的数据传递为值传递。例如程序如下:

#include

#include

int mult10(int n)

{ n*=10;

return(n);}

main()

{int num=5,result ;

result =mult10(num);

printf("result=%d\n", result);

printf("num=%d\n", num);

system("pause");}

运行结果是:

结果表明,尽管形参n的值在mult10函数中被改变了,但由于实参num和形参n分别占用不同的单元,所以形参n的改变,并不影响与其对应的实参num的值,mult10函数调用之前num的值是5,调用之后num的值仍然是5。

另外,单个数组元素可以作为函数参数,同此情形完全一样,也是值传递。

2.2 数组名作为函数参数

由于数组名代表着整个存储空间的起始地址,或者说其值等于第一个元素的起始地址。即:定义int a[10]; 时,则有:a=&a[0]。所以,当使用数组名作为函数参数时,其参数传递是地址传递方式,函数的调用,实际上是把实参数组的起始地址传递给形参数组,形参数组和实参数组共同占用存储单元,只要形参数组中的某一元素值改变,将直接影响到与其对应的实参数组中的元素值的改变。例如:

#include

#include

void ADD1(int a[ ], int n)

{ int i;

for(i =0; i

a[i]++;

}

int main( )

{static int array[ ]={6,7,8,9,10,11,12,13,14,15};

int i;

ADD1(array,10);

for(i =0; i

printf("%d ", array[ i ]);

system("pause");

}

运行结果是:

结果表明,当数组名作为函数参数时,实参数组和形参数组公用相同的存储区域,只要数组中的值一改变,储存的将永远是改变后的值,之前的值被覆盖掉,将永远不复存在。

2.3 指针变量作为函数参数

指针变量作为函数的参数时,其参数传递方式为地址传递方式,和数组名作为作为函数参数时相同。例如:

#include

#include

void swap(int *x, int *y)

{int temp ;

temp=*x ;

*x=*y ;

*y=temp ;

}

int main( )

{int x=44,y=88 ;

int *ptr1,*ptr2 ;

上一篇:山区公路路基的滑坡运动模式的研究 下一篇:PLC与变频器组成的交流速度―位置控制系统设计