C语言中参数传递均采用单向值传递,即将实参的值复制到形参中。但被复制的值可能是变量、数组元素或表达式的值,也可能是地址值。这样在C语言中调用有参函数时,参数传递的方式就有值传递和地址传递两种。
1.值传递方式
值传递方式的特点是调用函数将实参数据复制到被调用函数对应的形参中,数据传递是单向的,即只由实参传给形参,而不能由形参传回来给实参。
在执行一个被调用函数过程时,形参的值如果发生改变,并不会改变调用函数中实参的值。形参的值不会使对应的实参数据发生变化。当形参是变量,而实参是对应类型的变量或数组元素或表达式时,将采用值传递的方式传递数据。
例5-6 函数调用时的“单向值传递”示例。
程序运行结果如图5-7所示。
图5-7 程序运行结果(www.xing528.com)
此程序中的函数swap,在流程中将两个形参的值进行了交换。可是由于形参和实参是不同的内存单元,所以形参变换不会改变main函数中实参a、b的值。换句话说,这个函数swap毫无实际的功效!
在“单向值传递”的规则中,实参类型与形参类型应注意保持一致。若不一致,则实参自动转换为形参类型,再进行参数复制。
2.地址传递方式
传地址方式的特点是调用函数将实参的地址复制到被调用函数对应的形参中,对形参的操作实际上是直接引用实参所有存储单元。形参值的改变会导致实参值的相应变化。例如:
这里的“&”运算符是求变量x的地址,&x作为实参,其作用是将从键盘输入的值写入系统为变量x分配的内存单元里。
当形参是数组名或指向数组的指针时(将在第6章介绍指针),实参是对应类型的地址、指针、数组名、函数名或函数指针时,将采用地址传递方式传递数据。
注意:
调用无参函数时,不发生参数传递。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。