C++ 函数参数

来源:互联网 发布:json怎么用 编辑:程序博客网 时间:2024/04/28 13:26

C++函数

 

函数的参数传递方式:按值传递按地址传递按引用传递

值传递最简单,是一种单向的参数传递方式,也就是说传递过程中产生一个副本,只把实参的值传递给形参,传递完成以后副本的工作也就结束了,实参不再与形参有联系,进入函数体后整个函数生命周期内只有形参在起作用。形参在函数内的变化不会影响实参,实参的值在函数调用后不会发生改变。

 

如果希望被调函数改变主调函数中实参的值,可以采用按地址传递或按引用传递方式。


按地址传递时,函数定义时以指针作为函数的形参,函数调用的实参必须是指针变量或者变量的地址:

定义: void func( string *p )

调用: string str; ... func( &str );

 

按引用传递

void swap( int &a, int &b);

调用 swap( val1, val2);

交换后实参val1val2都改变了。

a val1的别名,bval2的别名,对a, b的操作就是对val1val2的操作。

使用引用传递参数没有在内存中产生实参的副本,不需要将实参拷贝给形参。因此当参数传递的数据较大,引用传递比值传递在空间和时间上效率都更高。使用指针进行地址传递也可以改变实参,但是同样要给形参分配额外的内存单元,把地址赋值给指针变量的运算。

 

const引用形参能够保证参数在函数中不被修改,既保证了数据的安全,又改善了运行效率。实际上使用非常量引用作为形参,会不必要地限制传入实参的类型(必须为非const对象)。

 

C++ 默认参数值

 

函数有多个形参,带默认值的形参必须放在参数表的右部,也就是带默认值的参数右边不能有不带默认值的形参

 

在函数调用时,如果省略某个实参,那么该实参右边的所有实参都必须省略。

void fun1( int, int = 1, int = 1, int = 1)

...

func1(10,  ,  5); // 错误

fun1(10, 1, 5); // 正确

0 0
原创粉丝点击