C语言函数的参数传递主要有两种,一种为值传递,可以了理解为传递了一个副本,传递之后副本无论如何改变均不会影响到原来的变量,安全性高,但是子函数只能通过return来实现与原函数的通信;另一种为地址传递,包括数组名作为函数参量和指针变量作为函数参量
注:其实编译器会把数组名作为指针变量进行处理,只是数组名是个指针常量,不能改变数组名的值,如ar【】,ar是一个数组名,则不能使用ar++这样的表达式,因为ar++会改变ar的值,编译器是不允许的!我这里只是点到即止,为了说明数组名与指针变量之间有很大的联系,具体可以参看相关C语言教材
函数的地址传递方式为程序提供了很大的灵活性,但是存在着用户可能会不经意修改了一些数据的可能。从ANSI C开始,提供了const关键字来保护数组内容,可以在函数声明和函数定义中加入const关键字,若函数中出现了对该数组的意外修改则会报错,另外这样使用const关键字是不要求原始数组是固定不变的,只是用于要求该子函数的动作不能改变我的数组参数的内容,达到数据保护的目的。
这里我提供了一个实用性较强的例子:老师输入同学成绩,然后程序显示出同学们的成绩,并给出评定报告,报告内容包括:最高分,最高分人数,90分以上人数,不及格人数以及平均分。由于输入成绩之后我不希望这个成绩被程序意外修改了,所以在子函数中采用const关键字进行保护,另外我希望评定报告的程序能用一个子函数来实现,但是需要返回这么多结果,显然采用return语句无法实现,所以采用数组来进行实现,具体代码如下: