目录
4、用sizeof来判断他们俩的大小,引用是所引用类型的大小,指针是地址空间的所占个数(32位平台下占4个字节)。
5、引用的变量加一就是变量自增一,指针加一是跳过一个所指向类型的一个类型的大小。
6、引用比指针使用起来更加危险(指针不严谨使用,有越界,非法访问等危险)。
一、引用的概念
通俗的讲:引用就是一个变量的别名
阿狗 在家被叫狗蛋,在外被叫张苟一。
阿狗就是变量的名字,狗蛋和张苟一就是引用。
用代码去解释:
类型& 引用变量名(对象名) = 引用实体
int main()
{
int a = 0;
int& b = a;
return 0;
}
b 就是 a 的别名,b是引用。
所以
b的地址和a的地址是一样的,因为他们就是同一个变量。
二、引用的特性:
1、引用在定义时必须初始化
❌
✔
2、 一个变量可以有多个引用
int a=0;
int &b=a;
int &c=a;
int &d=a;
3、引用一旦引用一个实体,再不能引用其他实体
张苟一叫的就是阿狗,他不能在改变。不能变成在叫 张苟一 的时候,铁牛回应了。
4、取别名原则:对原引用变量,权限只能缩小 不能放大。
意思是 阿狗是老师,狗蛋是他的引用变量,在叫他别名时不能叫他狗蛋教授
const int c = 1;
//错误
int& d = c;//放大
//正确
const int &d =c ;//不变
int a = 0;
int &e = a;//缩小
5、临时变量的引用
临时变量是什么东西?
double f = 3.12;
int g = f;
怎么把f中的数放到g中?
这是我们要引入临时变量的概念。
临时变量的特性
记住:临时变量具有常性
从而:
为什么图一的引用不行,图二可以。
结合临时变量的概念
这时,e引用的是f的临时变量
结合临时变量的特性,临时变量具有常性
所以要用const。
那不用为什么不行,因为不用的话,就违反了引用的特性,引用只能缩小范围,不能扩大。
临时变量具有常性,引用之后必然前面要加const,不然就是扩大引用的范围了,让它从不可修改变为可修改类型。
注意!
这时e就不是f的别名了!
它是这个临时变量的别名!
三、引用的妙用
1、函数参数中替代指针
我们平常要写个简单的swap函数
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
我们可以用引用来代替指针
void swap(int& a, int& b)
{
int tmp = a;
a = b;
b = tmp;
}
这样可以
①、减少拷贝,提升效率
②、引用传参更好理解,更一目了然。
2、做返回值
int &cout()
{
static int n=0;
n++;
return n;
}
四、引用与指针的不同点
1、引用是变量的别名,指针存储的是变量的地址。
2、引用必须初始化,指针不用。
3、引用在初始化引用一个变量后就不能改变,而指针可以。
4、用sizeof来判断他们俩的大小,引用是所引用类型的大小,指针是地址空间的所占个数(32位平台下占4个字节)。
5、引用的变量加一就是变量自增一,指针加一是跳过一个所指向类型的一个类型的大小。
6、引用比指针使用起来更加危险(指针不严谨使用,有越界,非法访问等危险)。
限于篇幅,一些知识点未讲到,也许一些知识点也有错误,但总之感谢观看,希望能给你提供帮助。