引用
- 引用相当于为对象起了另一个名字。
- 引用本身不是对象,不能定义引用的引用。
- 引用只能绑定到对象上。
- 引用必须被初始化,初始化之后引用即被绑定到该对象上,不可更改。
指针
- 本身就是一个对象。
- 无需赋初值,但未初始化的指针会导致很多问题,建议定义时初始化。
- 指针存放地址。
如果指针指向了一个对象,则允许使用解引用符(*)来访问该对象。
#include<iostream>
using namespace std;
int main()
{
int q = 10;
int*p = &q;
cout << *p << endl;
int j = *p;
cout << j << endl;
return 0;
}
输出
10
10
const关键符
- const对象必须初始化,且初始化后其值不可改变。
- const定义的对象作用域仅在文件内。
- 必要时,使用
extern
定义,可被其他文件使用。
//file_1.cpp定义并初始化了一个常量,该常量可以被其他文件访问
extern const int bufSize = fcn();
//file_1.h头文件
extern const int bufSize; //与file_1.cpp中定义的bufSize是同一个
const的引用
const int ci = 1024;
const int &r1 = ci; //正确:r1和ci对应的对象都是常量
int r1 = 42; //错误:r1是对常量的引用
int &r2 = ci; //错误:r2是非常量引用,不可指向常量对象
不允许通过const引用改变对象的值,但可以通过对象或引用改变值。
//const引用的值可以通过引用的对象或该对象的非常量引用改变
int i = 42;
int &r1 = i;
const int &r2 = i;
i = 0;
r1 = 0;
指针和const
指向常量的指针,想要存放常量对象的地址只能使用指向常量的指针。
const double p = 4.2;
const dobule *r1 =&p;
const指针,必须初始化,且初始化之后值不再改变。
int errNumb = 0;
int *const curErr = &errNumb;//指向errNumb的常量指针
注:指针的值是地址,常量指针的值不变,但该地址内的内容可变。
顶层const,指针本身是一个常量;底层const,指针所指的对象是一个常量。拷贝时有区别:顶层const拷贝无影响,底层const拷贝是必须同时具有底层const的资格。