关于#c++#的问题:上面的代码是你写的文章中的一部分代码

#include<iostream>
using namespace std;
void swap(int &a, int &b);
int main()
{
    int num1 = 10;
    int num2 = 20;
    cout<<num1<<" "<<num2<<endl;
    swap(num1, num2);//引用:int &a=num1, int &b=num2
    cout<<num1<<" "<<num2<<endl;
    return 0;
}
void swap(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}

你好,上面的代码是你写的文章中的一部分代码。我有个问题想请教一下, 我试了一下把void swap(int &a, int &b)里面的a和b换成main函数中的num1和num2,结果也是对的。此时调用swap(num1, num2),这样解释int &num1=num1, int &num2=num2,显然不对,此时是否可以理解为直接引用main中定义的num1和num2?

引用 皆我百晓生 小程序回复内容作答:
是的,你的理解是正确的。在函数void swap(int &a, int &b)中,ab是引用类型的参数,它们是对main函数中的num1num2的引用。当你调用swap(num1, num2)时,实际上是将num1num2作为参数传递给了swap函数,并且在函数内部使用ab来引用这些参数。因此,你在swap函数中对ab的修改会直接影响num1num2的值。这种方式可以实现在函数中修改函数外部变量的值。

你所言“此时调用swap(num1, num2),这样解释int &num1=num1, int &num2=num2”从某种程度上讲,它其实是对的。关键是swap的两个参数和main中定义的num1和num2并不在同一个作用域,即使你把a改名为num1,但是两者仍然是不同的变量并且可以被编译器轻易的区分。当然了,a和b本来就是引用类型的变量,无论你改不改名字,“int &num1=num1, int &num2=num2”或者“int &a=num1,int& b=num2”都是直接引用num1和num2.

swap里面的参数名字和main里面变量名啥关系没有,可以随便起