C++ 函数传参
在C++中,函数传递参数的方式主要有三种:
- 按值传递(pass by value)
- 按引用传递(pass by reference)
- 按指针传递(pass by pointer)。
比较与总结
- 按值传递:适用于传递简单数据类型(如int, double等),避免函数内部修改外部数据,缺点是对于大型对象会有复制开销。
- 按引用传递:适用于需要在函数内部修改外部数据的场景,同时避免了复制开销,缺点是容易导致不小心修改外部数据。
- 按指针传递:适用于动态内存管理或需要传递数组等数据结构的场景,指针需要进行空值检查,增加了程序复杂性。
每种方式都有其适用场景和优缺点。以下是详细说明和示例:
1. 按值传递(Pass by Value)
按值传递是将实际参数的值复制一份传递给函数。在函数内部,修改参数不会影响函数外部的原始值。
#include <iostream>
void incrementByValue(int a) {
a += 1;
std::cout << "Inside function: " << a << std::endl;
}
int main() {
int num = 5;
incrementByValue(num);
std::cout << "Outside function: " << num << std::endl;
return 0;
}
//Inside function: 6
//Outside function: 5
2. 按引用传递(Pass by Reference)
按引用传递是将实际参数的引用传递给函数。在函数内部修改参数会直接影响到函数外部的原始值。
#include <iostream>
void incrementByReference(int &a) {
a += 1;
std::cout << "Inside function: " << a << std::endl;
}
int main() {
int num = 5;
incrementByReference(num);
std::cout << "Outside function: " << num << std::endl;
return 0;
}
//Inside function: 6
//Outside function: 6
3. 按指针传递(Pass by Pointer)
按指针传递是将实际参数的地址传递给函数。在函数内部通过指针访问和修改参数的值,这种方式类似于按引用传递,但需要使用指针语法。
#include <iostream>
void incrementByPointer(int *a) {
(*a) += 1;
std::cout << "Inside function: " << *a << std::endl;
}
int main() {
int num = 5;
incrementByPointer(&num);
std::cout << "Outside function: " << num << std::endl;
return 0;
}
//Inside function: 6
//Outside function: 6