You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何mySwap02与mySwap03的参数地址存在差异?

问题解答

核心原因:指针传递与引用传递的参数本质完全不同

  • 指针传递(mySwap02):函数的参数是一个独立的指针变量,调用函数时会为这个参数创建副本。这个副本变量的值是实参的内存地址,但它自身占用一块新的内存空间。你打印的其实是这个副本指针变量的地址,和实参(或引用参数)的地址自然不一样。
    代码示例:

    void mySwap02(int* a) {
        // &a 是副本指针变量自身的地址,不是它指向的实参地址
        cout << "mySwap02中参数a的地址:" << &a << endl;
    }
    
    // 调用场景
    int num = 10;
    int* p = &num;
    mySwap02(p); // p的地址和mySwap02里a的地址完全不同
    
  • 引用传递(mySwap03):函数的参数是实参的别名,它不占用额外的内存空间(编译器会做优化),引用的本质就是绑定到实参本身。所以打印引用的地址时,输出的就是实参的内存地址。
    代码示例:

    void mySwap03(int& a) {
        // &a 就是实参的地址,因为a是实参的别名
        cout << "mySwap03中参数a的地址:" << &a << endl;
    }
    
    // 调用场景
    int num = 10;
    mySwap03(num); // &num 和mySwap03里的&a完全一致
    

总结来说:指针传递的参数是「存储地址的新变量」,引用传递的参数是「原变量的别名」,二者的内存身份完全不同,所以它们的地址会不一样。

内容的提问来源于stack exchange,提问作者Akira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:09:32