MST

星途 面试题库

面试题:C++ 按引用传递修改实参的基本原理及应用

请简述C++中按引用传递修改实参的原理,并编写一个函数,通过引用传递一个整数,在函数内将其值翻倍,展示按引用传递如何修改实参。同时解释函数调用过程中栈的变化情况。
13.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

按引用传递修改实参的原理

在C++ 中,按引用传递本质上是传递实参的别名。当我们声明一个引用参数时,它实际上是实参的另一个名字,与实参共享相同的内存地址。所以对引用参数的任何修改,实际上就是对实参的修改,因为它们指向同一块内存区域。

代码示例

#include <iostream>

// 通过引用传递一个整数,在函数内将其值翻倍
void doubleValue(int& num) {
    num *= 2;
}

int main() {
    int value = 5;
    std::cout << "Before function call: value = " << value << std::endl;
    doubleValue(value);
    std::cout << "After function call: value = " << value << std::endl;
    return 0;
}

函数调用过程中栈的变化情况

  1. 调用函数前
    • 主函数main的栈帧已经存在,栈中包含main函数的局部变量value,其值为5。
  2. 调用doubleValue函数时
    • 系统在栈上为doubleValue函数分配一个新的栈帧。
    • doubleValue函数的参数num(引用类型)并不需要额外的空间来存储值,因为它是main函数中value的别名,直接指向value的内存地址。
  3. doubleValue函数执行时
    • doubleValue函数栈帧内执行num *= 2,由于numvalue的别名,实际上修改的是main函数栈帧中value的值,value变为10。
  4. doubleValue函数返回后
    • doubleValue函数的栈帧被销毁。
    • 回到main函数,此时main函数栈帧中的value值已经被修改为10,继续执行后续代码输出修改后的值。