一、非引用形参
表示对应实参的局部副本,对这类形参的修改仅仅改变了局部副本的值,一旦函数执行结束,这些局部变量的值就没有了。
1、指针形参(说它是非引用形参是把指针作为实参,而不是指针对应的对象)
形参是指向const对象的指针:这表明在调用的函数内部,指针所指向的对象是不能改变的。对于这种函数,实参可以是const对象,也可以是非const对象
2、const形参
实参既可以是const型也可以是非const型,
二、引用形参
void func(&a1)//定义函数
func(a);//调用函数
三、引用形参和非引用形参的区别
a、对于const形参
为引用形参时,实参可以为const型也可以为非const型;为非引用形参时,实参也可以为const型可以可以为非const型
b、对于非const形参:数字或者是字符串是无法用作实参的
为引用形参时,实参只能为非const型的完全同类型的数据;为非引用形参时,实参可以为const型也可以为非const型
注意:应该将不需要修改相应实参的形参定义为const引用,例如func1(int v1)并不修改实参,我们在func2(int const v2)中调用了func1(),其中参数是v2,则此时就会造成v1无法传递给func1。因此如果不修改实参的话,为了后期程序,我们应该设为const引用。此时字符串类型的额数据就可以作为实参了。
四、情况分析
数组最好通过引用的方法来传递,这样数组的大小要求严格,不会做到访问的越界发生;非引用数组形参的类型检查只是确保实参和形参具有相同类型的的指针,而不会检查是否指向相同大小的数组。不需要修改数组元素时,我们可以将形参定义为const对象的指针。
int *matrix[10];//含有10个元素的矩阵,每个元素都是一个指针
int (*matrix)[10];// 一个含有10个元素的矩阵,matrix是指向这个矩阵的指针
1、对于数组,何时用指针形参,何时用引用形参
当函数需要处理数组且函数体不依赖数组的长度时使用指针形参,其他情况使用引用形参。
指针形参的优点是:函数操纵的是指向数组的指针,而不是数组本身,因此任何长度的数组都可以调用该函数,缺点是:由于不依赖于数组的长度,这样很容易造成内存的越界访问,从而出错
引用形参的优点是:函数体中依赖数组的长度,很安全;缺点是实参数组的长度必须与形参完全匹配。