函数的参数及其传递方式

发表时间:2021-07-23 15:04

函数的参数及其传递方式

C语言函数参数的传递方式只有传值一种,传值又分为传变量值和传变量地址值两种情况。比较复杂的是结构变量,结构变量的值是指结构域中所有的变量值。在C++中,像int、float、double、char、bool等简单数据类型的变量,也是对象。类对象一般都包括数据成员和成员函数,如果在C++沿用C语言的说法,则对象的值就是对象所有数据成员的值,约定参数传递中传递“对象值”是指对象的数据成员值,传递“对象地址值”是指对象的首地址值。C++函数还可以使用传递对象的“引用”方式,即它的函数参数有两种传递方式:传值和传引用。传引用其实就是传对象的地址,所有也称传地址方式。

参数传递中不要混淆传地址值和传地址的区别。传地址值传递的是值,不是地址;传地址传的是地址不是地址值。传递对象地址值是使用对象指针做为参数;传递地址时使用对象引用作为参数。

3.1.1 对象作为函数参数

将对象作为函数参数,是将实参对象的值传递给形参对象,这种传递是单向的。形参拥有实参的备份,当在函数中改变形参的值时,改变的是这个备份中的值,不会影响原来实参的值。

3.1.2 对象指针作为函数参数

将指向对象的指针作为函数参数,形参是对象指针(指针可以指向对象的地址),实参是对象的地址值。

注意:不要非要在主程序里产生指针,然后再用指针作为参数。函数原型参数的类型是指针,可以指针让它指向对象地址,即:

string *s1=&str1;

是完全正确的,使用&str1标识的是取对象str1的地址值,所以&str1直接作为参数即可。

3.1.3 引用作为函数参数

可以使用“引用”作为函数的参数(引用形参)。这时函数并没有对形参对象初始化,即没有指定形参对象是哪个对象的别名。在函数调用是,实参对象名传给形参对象名,形参对象名就成为实参对象名的别名。实参对象和形参对象代表同一个对象,所以改变形参对象的值就是改变实参对象的值。

实际上,在虚实结合时是把实参对象的地址传给形参对象,使形参对象的地址取实参对象的地址,从而使形参对象和实参对象共享同一个单元。这就是地址传递方式。

通过使用引用参数,一个函数可以修改另外一个函数内的变量。因为引用对象不是一个独立的对象,不单独占用内存单元,而对象指针要另外开辟内存单元(其内容是地址),所以传引用比传指针更好。

注意:虽然系统向形参传递的是实参的地址而不是实参的值,但实参必须使用对象名。

3.14 默认参数

默认参数就是不要求程序员设定该参数,而由编译器在需要时给该参数赋默认值。当程序员需要传递特殊值时,必须显式地指明。默认参数是在函数原型中说明的,默认参数可以多于1个,但必须放在参数序列的后部。

如果一个默认参数需要指明一个特定值,则在其之前所有的参数都必须赋值。

3.1.5 使用const保护数据

const修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。这主要是为了提高系统的自身安全。C++中普遍采用这种方法。

返回首页:重庆自考网    重庆自考专业 重庆自考报名 重庆自考学校   本站申明    
申明:重庆自考考生网上交流平台为为重庆自考学习交流网站,不涉及自考报名报考信息,官网信息请以“重庆教育考试院”为准;如有任何不妥信息请及时联系删除!
在线答疑
 
 
 工作时间
周一至周五 :9:30-21:00
周六至周日 :10:00-22:00