1.*:乘号//变量式;单位运算符//解引用指针;声明//类型 * 标识符
2.&:位与//a&b;
取地址符//&a 右操作数,没有左操作数;
int &x = a//引用(别名),不存在别名的别名(二级引用)
不能定义所谓的空引用,必须初始化
当传出的值为空,函数不可调用,算是一层安全控制
3.int const& c = a;//c 不能改变,&修饰的是const c,
int &const x = a;//这里&修饰的是的const,被程序忽略,所以x的值可以改变
当常变量:用第②种方式
当普通变量:①②两种方法都可以
4.函数传参时
常引用:const int &y;(万能引用)//可以引用一般变量,常变量,字面常量
底层引用的是tmp
引用:int &y
右值引用:
左值:可以取地址
右值:无法取地址
右值引用:只能引用字面常量,不能引用左值
int &&r= 10;//int tmp = 10; int &r = tmp;//与常性引用相似 const int &b= 20
//常性引用
int tmp = 10;
const int &z = tmp;
&&表示引用右值
不同:字面常量的引用不能改变值的大小
右值引用改变的是tmp的值
6.可以引用:变量 指针 数组
7.对于指针的引用: int *&ps = ip;
8.指针和引用的区别
①语法规则:指针变量存放某个实例的地址;
引用是某个实例变量的别名
②程序为指针碧昂量分配的村村区域;而不为引用分配内存区域
③解引用是指针是使用时要在前面加”*”;引用可以直接食用
④指针变量的值可以发生改变,存储不同实例的地址;
引用在定义是就被初始化,之后不能在改变
⑤指针变量的值可以为空NULL;没有空引用
⑥指针变量作为形参时需要测试是否为NULL;引用不需要判空
⑦sizeof:指针变量大小;引用的变量的大小
⑧理论上指针的级数没有限制;引用只能有一级
⑨++指针:指向下一个存储单元;
++引用:对实例的值进行改变
9.指针和引用的相同点:不得以指针或引用的形式返回局部变量
除非变量的生存期与函数无关(静态变量)
10.引用的使用:
①不需要使用引用:形参不需要影响实参的值(内置类型)
②需要使用引用:自制类型(struct);形参需要影响甚至改变实参的值