(1) c语言的函数与参数传递
1.1 函数与参数(传值.引用) 【程序编程相关:J2EE的13种核心技术(二) 】
在着手开始学习数据结构与算法设计方法之前,我们先回顾一些c语言基础,这会有利于我们以后基于c语言的编程与分析,虽然其中有许多你可能已经非常熟悉了. 【推荐阅读:J2EE的13种核心技术(一) 】
考察函数ex_1(程序1.1),a,b,c都是函数ex_1的形式参数(formal parameter),类型均为整形,如果以下调用ex_1(1, 2, x),它的返回结果还是一个整数: 【扩展信息:WIN2003终于支持静态ARP了】传值参数:
----------------------------------------------------------------------------------------------------------------------
程序1.1int ex_1(int a, int b, int c){ return (a + b ) / c ;}当ex_1(1, 2, x)被执行时,a的值被赋为第一个参数1,b的值被赋为第二个参数2,而需要注意的是,c的值会被赋为x,但如果x不是int类型,那么首先会先进行强制类型转换.例如x = 3.7是float型,那么c会被赋值成int(3.7) = 3.在该程序段中(程序1.1),a, b, c都是传值参数(value parameter),但这种形式传值时,首先要判断原参数的类型分别能否合a, b, c的类型相同,如果不同就进行强制类型转换,当然这里假设这种转换是允许的.在这种形式的传入参数时,函数体调用或操作的只是原参数的一份拷贝,而不会修改原参数的值.
引用参数:
为了书写与理解方便,我们以后会不加说明的在程序段中直接使用到c++的引用传递参数形式.在程序1.1中使用的传值参数的用法会增加程序的开销,比如调用ex_1(int a, int b, int c)传入参数时系统需要赋值一份拷贝,而在返回时却又要释放这些拷贝,假设函数ex_1()被调用一千次,则需要复制与释放传值参数a.b.c各3000次,显然这会带来效率的降低!使用引用参数(reference parameter)会是解决这个问题的好办法.----------------------------------------------------------------------------------------------------------------------
程序1.2int ex_2(int &a, int &b, int &c){ return (a + b ) / c ;} 考察程序1.2中函数ex_2(x, y, z).其中x, y, z的类型分别与ex_2中的参数a, b, c相同,那这些原参数x, y, z将分别会被赋对应的别名(alias)a, b, c.也就是相当于原来叫x, y, z的三个人再给他们分别起另外一个名字分别是a, b, c称呼他们.因此在函数ex_2()中,对a,b,c的操作相当于对原来的x,y,z直接进行操作,只是现在称呼的名字不同而已.... 下一页