c++中定义参数为什么用&?

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++中的传引用,在函数调用是,不会给形式参数分配内存空间,它只是实际参数的别名,使用它就是使用实际参数,也不需要复制值,在函数中任何对形式参数的修改就是对实际参数的修改。
所以,第一个是单向的;第二个是双向的。

&是取变量地址
*是获得地址的变量