引用的定义:对已存在的空间,变量起别名。
使用方法:
int a = 1;
int& b = a;
b = 3;
当出现两个函数void fun(int a){},和void fun(int& a) {},他们两个是函数重载。
void fun(int a) {
cout << "fun(int)" << a << endl;
}
void fun(int& a) {
cout << "fun(int&)" << a << endl;
a = 100;
}
使用实例:
int a = 1;
int& b = a;
b = 3;
fun(10);//调用第一个函数
//调用第二个fun函数
void fun(int& a);
fun(b);
{
void fun(int& a);
fun(b);
}
而引用的好处就是他和指针有相同的效果,既可以查看又可以修改实参。
当代码中还有指针类型的函数出现,如果想要区分使用这两个函数,我们需要在全局范围下用到以下的方法:
void(*p_fun1)(int*) = &fun;
void(*p_fun2)(int&) = &fun;
void(*p_fun3)(int) = &fun;
使用代码示例:
(*p_fun1)(&c);
cout << c << endl;
总结:在我们学完引用后我们一共就有三种传参方法,
值传递,引用传递,地址传递; 如果只是查看实参,三种方式都可以,推荐引用和地址传递,值传递是对实参的拷贝,额外申请的空间的大小事不可控的,地址传递额外申请空间大小是固定的,引用传递不额外申请空间。
尤其是对复合类型(结构体,类)来说,尽量避免值传递 如果想要修改实参,只能用引用传递和地址传递。 引用只有一级,指针可以多级.
要注意引用一旦定义就必须初始化值,引用一旦和某个空间绑定后就不能再引用其他空间了,指向可以改。