int dist(int a,int b)
int dist(int &a,int &b)
这两种有什么区别?第二种是引用吗?为什么都用第二种而不是第一种?效果不都一样吗?
参数中&代表取地址,就是将你变量的地址传进去,如果函数中参数改变,那么刚刚传的变量也会跟着改变。例如:
int dist(int &a,int &b)
{
a=123;
b=123;
}
int main()
{
int x,y;
x=100,y=100;
dist(x,y);
cout<<x<<' '<<y<<endl;
return 0;
}
这时输出的不是100 100,而是123 123
因为参数会带着你刚才传进去的变量一起改变,知道了吗?
int dist(int &a,int &b)
{
a = 123;
b = 123;
}
这么写
int main()
{
int a = 1; b = 1;
dist(a, b);
则此时a和b等于123,而没有&则不会改变
}
很简单 &代表同名变量。比如张三在家里被爸妈叫做小三,在外面叫做小张,名字不一样,但是指的是同一个人。在这里就是说x和a是指的同一个变量,只是称呼不一样而已。
如果不加&,就只是说明在进入函数的时候,a的值和X相同,a的变化与X无关。比如两个班级都有一个学号是01的人,但是两个人不一样,一个人变学号了,一般来说另一个人不会跟着变。
第一个是传值参数,在函数调用时会给形式参数a,b分配内存空间,且把实参的值复制给形式参数,这样形式参数的值就和实际参数一样,但是当你在函数内部把形式参数的值若是改了,对实际参数不会有任何影响的;
第二个是C++中的传引用,在函数调用是,不会给形式参数分配内存空间,它只是实际参数的别名,使用它就是使用实际参数,也不需要复制值,在函数中任何对形式参数的修改就是对实际参数的修改。
所以,第一个是单向的;第二个是双向的。
&是取变量地址
*是获得地址的变量