C语言的函数参数和返回值传递方式:值传递和地址传递(即指针传递);
C++语言的函数参数和返回值传递方式:值传递,地址传递和引用传递。
规则1:不论函数是原型还是定义,都要明确写出参数的类型和名字,如果函数没有参数,使用void而不要空着;
规则2:参数命名要恰当,输入参数和输出参数的顺序要合理。
规则3:如果参数死后指针,且仅做输入用,则应该在类型前加const,以防止该指针指向的内存单元在函数体内无意中被修改。
返回值有两种途径:使用return语句和使用输出参数。
规则1:不要省略返回值的类型,如果函数没有返回值,应声明为void类型。
规则2:函数名字与返回值类型在语义上不可冲突。
规则3:不要讲正常值与错误标志混在一起返回。建议正常值用输出参数获得,而错误标志用return语句返回。
提示:如果函数的返回值是一个对象,有些场合下可以用“返回引用”替换“返回对象值”,这样可以提高效率,而且还可以支持链式表达。但有些场合下只能用“返回对象值”。
示例:
(1)定义一个对象,如下:
(2)返回引用:
如果上面赋值函数采用“返回对象值”的方式,虽然功能仍然正确,但由于return语句要把*this拷贝到保存返回值的外部存储单元中,增加了不必要的开销,降低了赋值函数的效率。
(3)返回对象:
对于上相加函数,使用了“返回对象值”的方式返回String对象,这把局部对象temp及其真正地字符串值拷贝一份给调用环境接受者。如果改用“返回引用”,那么函数返回值是一个指向局部对象temp的“引用”(即地址),而temp在函数结束时自动销毁,将导致返回的“引用”无效。
注意:不要把返回指针的函数用做左值。