就像上一节最后说的,引用就像指针常量,不可以改变指针指向,可以改变参数值,这就是唯一的重点。
引用的提出,就是定义了一个变量,存入数据,能否给这个变量起一个小名,都是这个房子,但是有一个大名,有一个小名,于是有了:
int a = 10;
int& b = a; //int const* b = &a;
我们可以通过b对该数据进行任何操作,赋值、运算、取地址等等,都一样,因为这就是一个房子的不同名字而已。所以,这就带来,定义引用的条件:第一,必须有右值(没房子还起什么小名);第二,一旦初始化,就不能更改(你把这个名字给了这个房子,就不能用这个名字给其他房子起名字)有点像指针常量了吧,不可以更改指向了。
引用的用处:这个时候温习一下参数传递——值传递(不改变实参)、地址传递(改变实参)、那引用传递呢?
既然引用传递是从指针常量的角度出发的,那他一定可以改变实参!!!
void myswap1(int a, int b) {//值传递
int temp = a;
a = b;
b = temp;
cout << a << endl;
cout << b << endl;
}
void myswap2(int* a, int* b) {//地址传递
int temp = *a;
*a = *b;
*b = temp;
cout << *a << endl;
cout << *b << endl;
}
void myswap3(int& a, int& b) {//引用传递 起了个别名,修改别名就是修改原来的值,比指针简单,简化指针
int temp = a;
a = b;
b = temp;
cout << a << endl;
cout << b << endl;
}
观察就能知道,引用传递不用那么多******,指针其实虽然我能懂,但是太难看了,用int&,一步到位,使用函数的时候,也是直接传入变量名,不用地址,很爽!有木有!!!再也不怕忘记✳了
而且,还可以在主函数里,给自己定义的函数左赋值,这点太强了。
常量引用,const int & ret 就像既修饰指针又修饰常量,数值不可以改,指针不可以改。主要用途,比如打印数据,不允许修改主函数的实参值等。
今天就到这吧,明天学习默认参数、占位参数、函数重载