1 引用
int &a = 10;
double a = 3.14;
int &b = a;
- 引用并非对象
- 引用必须初始化
- 引用只能和对象绑定在一起,而不能和字面值或计算表达式的结果绑定
- 引用类型严格匹配
2 指针
double dval;
double * pd = &dval;
double * pd2 = pd;
int * pi = pd;
pi = &dval;
- 指针本身就是对象
- 指针的类型要和它指向的对象严格匹配
3 常量引用
int i = 42;
const int &r1 = i;
const int &r2 = 42;
const int &r3 = r1 * 2;
int &r4 = r1 * 2;
double dval = 3.14;
const int &ri = dval;
const int temp = dval;
const int &ri = temp;
int i = 42;
int &r1 = i;
const int &r2 = i;
r1 = 0;
r2 = 0;
4常量指针
定义:又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量 (这个常量是指针的值(地址),而不是地址指向的值) 。
int const* p; const int* p;
- 常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;
- 常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;
- 指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址;
5 指针常量
定义:本质是一个常量,而用指针修饰它。指针常量的值是指针,这个值因为是常量,所以不能被赋值。
int* const p;
- 它是个常量!
- 指针所保存的地址可以改变,然而指针所指向的值却不可以改变;
- 指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化;
已经晕了。。 更多参考 菜鸟
|