new
malloc
等动态分配的变量)extern
关键字; extern
关键字告知编译器该变量 / 函数已在其它位置定义// 指针的定义
string s = "hello";
string* ps;
// 指针的赋值
ps = &s;
// 使用指针获取对象
(*ps).length();
// 使用指针调用对象的方法
ps->length();
引用相当于为原变量起一个别名,在使用上与原变量差别不大
引用必须在初始化时完成与原变量的绑定,此后不能修改绑定关系
char c;
// 定义指针
char* p = &c;
// 直接定义引用
char& r = c;
// 在函数的参数表中定义引用,当相应的函数被调用时,引用进行初始化
void f (int& x);
f(y);
非 const
类型的引用,绑定的对象必须是左值(Lvalue)
void f (int& x);
f (i * 3); // 该句会报错,因为 (i * 3) 是右值
没有指向引用的引用,因为引用和引用的引用都指向原变量
没有指向引用的指针,但可以有指向指针的引用
int&* p; // illegal
void f(int*& p); // OK
指针与引用的比较
Pointer | Reference |
---|---|
独立于绑定的对象,可以不进行初始化 | 依赖于绑定的对象,必须进行初始化 |
可以修改绑定的对象 | 不可修改绑定的对象 |
可以设置为 NULL |
不可设置为 NULL |
new
用于分配内存空间并返回一个指针,该指针是访问这一块内存空间的唯一方式,与 malloc
相对应delete
用于将内存空间回收到内存池,与 free
相对应new
和 delete
可以保证构造函数 / 析构函数的正确调用,而 malloc
和 free
不调用构造函数 / 析构函数