1、函数形参或函数实参
函数形参和函数实参可用于同一事物:传递到函数中的数据。
从函数的角度来看:函数形参是在函数定义的括号内列出的变量,函数实参是在调用时发送给函数的值。
在函数名称后的括号内指定参数。可以根据需要添加任意数量的参数,只需用逗号将它们分开即可,
语法:
#include <iostream> using namespace std; void functionName(parameter1, parameter2, parameter3) { // 代码 }
以下示例具有一个函数,该函数将一个string fname作为参数。调用该函数时,我们传递一个名字,该名字在函数内部用于打印全名。
1)值传递
通过值传递时,函数接收参数的副本,对副本的修改不会影响原始参数。
例如,
#include <iostream> using namespace std; void myFunction(string fname) { cout << fname << " is cjavapy\n"; } int main() { myFunction("C"); myFunction("Java"); myFunction("Python"); return 0; }
2) 常量引用传递
常量引用传递通常用于传递大型对象(如字符串或容器)以避免复制,同时防止在函数中修改原始对象。
例如,
#include <iostream> using namespace std; void func(const int& x) { // x = 10; // 错误,不能修改常量引用 std::cout << "Inside func: " << x << std::endl; } int main() { int a = 5; func(a); // 传递的是 a 的常量引用 return 0; }
2、函数默认参数值
还可以通过使用等号(=
)来使用默认参数值。如果调用不带参数的函数,它将使用默认值。
例如,
#include <iostream> using namespace std; void myFunction(string lang = "cjavapy") { cout << lang << "\n"; } int main() { myFunction("C"); myFunction("Java"); myFunction(); myFunction("Python"); return 0; }
注意:具有默认值的参数通常称为“可选参数”。在上面的示例中, lang
是可选参数,并且"cjavapy"
是默认值。
3、函数返回值
使用的void
关键字表示函数不应该返回值。如果想让函数返回一个值,可以使用一个数据类型(比如int
, string
,等等)来代替void
,并在函数内部使用return
关键字。
例如,
#include <iostream> using namespace std; int myFunction1(int x) { return 4 + x; } int myFunction2(int x, int y) { return x + y; } int main() { cout << myFunction1(5) << endl; cout << myFunction2(5,8); return 0; }
4、函数引用参数
在向函数传递参数时可以使用普通变量。还可以向函数传递一个引用。当需要改变实参的值时,可以使用。通过引用传递时,函数接受的是参数的引用,对引用的修改会影响到原始参数。
例如,
#include <iostream> using namespace std; void swapNums(int &x, int &y) { int z = x; x = y; y = z; } int main() { int firstNum = 10; int secondNum = 20; cout << "执行 swap 之前: " << "\n"; cout << firstNum << secondNum << "\n"; // 调用该函数,它将更改firstNum和secondNum的值 swapNums(firstNum, secondNum); cout << "执行 swap 之后: " << "\n"; cout << firstNum << secondNum << "\n"; return 0; }
5、参数包和变长模板(Variadic Templates)
C++11 引入了变长模板(variadic templates),可以允许函数接受任意数量的参数。
#include <iostream> using namespace std; template<typename... Args> void func(Args... args) { (std::cout << ... << args) << std::endl; // 展开参数包 } int main() { func(1, 2, 3, "Hello", 4.5); return 0; }
相关文档: