面试题答案
一键面试值传递和引用传递的区别
- 内存使用:
- 值传递:在函数调用时,实参的值会被复制到形参的内存空间中。这意味着函数内部对形参的操作不会影响实参的原始值。形参有自己独立的内存空间,与实参的内存空间不同。
- 引用传递:引用传递时,形参实际上是实参的别名,它们共享相同的内存空间。并没有新的内存空间为形参分配,形参直接指向实参的内存位置。
- 性能:
- 值传递:由于需要复制实参的值,对于较大的对象(如复杂结构体或大型数组),值传递的复制操作可能会消耗较多的时间和内存,性能较低。
- 引用传递:引用传递不需要复制对象,只是传递对象的地址,因此在传递大型对象时,性能通常会比值传递好。
- 函数内对参数修改后对原变量影响:
- 值传递:函数内对形参的修改不会影响实参,因为形参和实参在不同的内存空间。
- 引用传递:函数内对形参的修改会直接影响实参,因为形参和实参共享内存空间。
代码示例
- 值传递示例:
#include <iostream>
void incrementByValue(int num) {
num++;
}
int main() {
int value = 5;
incrementByValue(value);
std::cout << "Value after function call: " << value << std::endl;
return 0;
}
在上述代码中,incrementByValue
函数采用值传递,函数内对 num
的修改不会影响 main
函数中的 value
变量。
- 引用传递示例:
#include <iostream>
void incrementByReference(int& num) {
num++;
}
int main() {
int value = 5;
incrementByReference(value);
std::cout << "Value after function call: " << value << std::endl;
return 0;
}
在这个代码中,incrementByReference
函数采用引用传递,函数内对 num
的修改会直接影响 main
函数中的 value
变量。