为何mySwap02与mySwap03的参数地址存在差异?
问题解答
核心原因:指针传递与引用传递的参数本质完全不同
指针传递(mySwap02):函数的参数是一个独立的指针变量,调用函数时会为这个参数创建副本。这个副本变量的值是实参的内存地址,但它自身占用一块新的内存空间。你打印的其实是这个副本指针变量的地址,和实参(或引用参数)的地址自然不一样。
代码示例:void mySwap02(int* a) { // &a 是副本指针变量自身的地址,不是它指向的实参地址 cout << "mySwap02中参数a的地址:" << &a << endl; } // 调用场景 int num = 10; int* p = # 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
相关产品推荐
相关产品推荐

