MST

星途 面试题库

面试题:C++ 中函数参数按值传递和按引用传递的区别

请详细阐述在 C++ 中函数参数按值传递和按引用传递的具体区别,包括对内存使用、性能以及函数内对参数修改后对原变量影响等方面。同时,分别给出一个按值传递和按引用传递的简单代码示例。
44.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

值传递和引用传递的区别

  1. 内存使用
    • 值传递:在函数调用时,实参的值会被复制到形参的内存空间中。这意味着函数内部对形参的操作不会影响实参的原始值。形参有自己独立的内存空间,与实参的内存空间不同。
    • 引用传递:引用传递时,形参实际上是实参的别名,它们共享相同的内存空间。并没有新的内存空间为形参分配,形参直接指向实参的内存位置。
  2. 性能
    • 值传递:由于需要复制实参的值,对于较大的对象(如复杂结构体或大型数组),值传递的复制操作可能会消耗较多的时间和内存,性能较低。
    • 引用传递:引用传递不需要复制对象,只是传递对象的地址,因此在传递大型对象时,性能通常会比值传递好。
  3. 函数内对参数修改后对原变量影响
    • 值传递:函数内对形参的修改不会影响实参,因为形参和实参在不同的内存空间。
    • 引用传递:函数内对形参的修改会直接影响实参,因为形参和实参共享内存空间。

代码示例

  1. 值传递示例
#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 变量。

  1. 引用传递示例
#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 变量。