目录
一般性变量引用的关键规则
- 引用类型的变量在声明的同时必须初始化
- 引用只能在声明的时候被赋值,且以后都不能再把该引用名作为其他变量的引用名
- 没有初始化的指针变量就是野指针
参数引用的常见错误
对于常量类型的变量,其引用必须是常量类型的,对于非常量类型的变量,其引用可以是常量类型的,也可以是非常量类型的。但无论什么情况,都不能使用常量引用去修改引用的变量的值。
#include <stdio.h>
#include <iostream>
int main()
{
const int a = 10;
//int &b = a; 报错,不能用一个非常量的引用去引用一个常量
const int &b = a;
int c = 4;
const int &d = c;//可以用一个常量去引用一个非常量的变量
//b++; //只要常量引用,就不能用其修改被引用的值
//d++;
//a++;
c++;//这个是被常量引用引用的变量,可以修改值
printf("c:%d\n", c);
printf("d:%d\n", c);
system("pause");
return 0;
}
运行如下:
引用和指针的区别是什么?
- 初始化的要求不同:引用在创建的时候必须被初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,在之后的任何地方都可以重新赋值,但是,在使用这个指针前,必须初始化完成。
- 可修改性不同:引用一旦被初始化指定一个对象后,就不能更改为另一个变量的引用了,而指针可以,更改指向的变量。
- 不存在NULL引用:存在NULL的指针,但不存在引用为NULL值的引用。所以,引用必须依靠具体的变量,对象而活,而指针可以不依靠它们任何而存在。
- 应用的区别:一旦指向一个对象后就不打算更改指向了,那就该用引用;如果存在指向NULL,想在不同时刻更改不同的指向对象,就需要用到指针。
总结:语言层面上,引用的用法和对象一样;二进制层面上,引用也是通过指针来实现的,只不过编译器帮我们完成了转换。总体来说,引用既具有指针的效率,也有变量使用的方便性和直观性。
引用为什么比指针安全?
引用不存在为空,一旦引用必定绑定一个具体对象,且不可更改。
指针就显的不太"专一",不仅可以跟更改所指向的对象,甚至可以为空,相对来说更不安全。