前言
“引用”的这个词我到经常使用到,但是它经常是作为动词出现的,而作为名词,我却很少用到。这个上次面试就问我指针和引用的区别,我就有点蒙圈了,因为对“引用”这个词确实不了解,然后面试官又问我知不知道值传递和地址传递,我差点拍案而起,心里想问我这个问题,是不是有点太简单了,然后回答的是:“值传递就是把变量的值直接传递给函数,在函数中可以使用但是无法修改原来的实参的值,而地址传递则是将变量的地址传递给函数形参,在函数中可以通过形参指针直接访问到变量所在的内存从而可以修改实参的值”。 后来面试官也没说什么。。。我一直认为“值传递”传递的变量的值,“地址传递”传递的变量的地址。 多好的逻辑,还很合理、顺口。 但是对于“引用”这个概念确实不了解,然后就是网上查资料,一查吓一跳啊,发现自己真的理解错了,特写一下笔记纪念下。
函数传递参数的两种方式: 值传递和地址传递
1. 引用的定义
首先,引用是C++语言对C语言的一个重要补充,而C语言中是不包含“引用”的。
我们可以对一个数据建立一个“引用”; 它的作用是为变量起一个别名。
例如,有个变量a,我们通过引用给a起一个别名:
int a = 10;
int &b = a;
则b可以成为变量a的一个引用。
此时:b = 10;
&b = &a; //变量a与他的引用的地址一样
而使用指针的话:
int *p = &a; //&:取地址
此时 *p = 10; // 因为p存储的是a的地址,所以p指向a,
2. 引用的注意事项:
1) 引用不是一种独立的数据类型,对引用只能声明,不能定义。 只能先定义一个变量,然后在声明对该变量的一个引用(起个别名)。
2) 声明一个引用时,必须同时对他进行初始化,即表明它代表那个变量。
3) 在声明一个引用后,不能再是指作为另一个变量的引用。只能初始化