#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)
中,a
和b
是引用类型的参数,它们是对main
函数中的num1
和num2
的引用。当你调用swap(num1, num2)
时,实际上是将num1
和num2
作为参数传递给了swap
函数,并且在函数内部使用a
和b
来引用这些参数。因此,你在swap
函数中对a
和b
的修改会直接影响num1
和num2
的值。这种方式可以实现在函数中修改函数外部变量的值。
你所言“此时调用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里面变量名啥关系没有,可以随便起