引用:
int i = 10;
int &ri = i;
- 引用必须被初始化。
- 引用无法重新绑定到另一个对象。
- 引用不是一个对象。它只是为一个已经存在的对象所起的另一个名字。、
指针:
int a = 10;
int *p = &a;
- 指针可以不被初始化。(未初始化的指针可能会引起程序错误)
- 指针是一个对象,可以对其进行赋值和拷贝。
- 定义空指针的方法、
int *p1 = 0;
int *p2 = nullptr;
int *p3 = NULL;
尽量使用nullptr定义空指针,避免使用NULL定义空指针。
4. 任何非0指针对应的条件值都是true
int a = 0;
int* p = &a;
int* p1 = 0; //空指针
if (*p) //if(*p)判断为假,if(*p1)报错(可能别的编译器不报错,那么也会判断为假)。
if (p) //if(p)判断为真,if(p1)判断为假
- 不能直接把int类型变量赋给int类型指针
int a = 0;
int *p = a; //错误
int *p1, p2;//pi是指针,p2是int变量
- 指向指针的指针
- 指向指针的引用
int i = 42;
int *p;
int *&r = p; //r是对指针p的引用
r = &i; //将i的地址赋给指针p,就是令p指向i
*r = 0; //将i的值改为0
面对比较复杂的指针或引用的声明时,从右往左看,离变量名最近的符号对变量的类型有最直接的影响。如本例中的 int *&r,从右往左看,r首先是一个引用,然后是一个指向指针的引用。
- 指针常量 指指针本身是常量,不能改变,所指向的内容可以改变
int * const p;//指针常量
常量指针 是指向常量的指针,指针本身可以指向别的常量,但指向的值是常量不能改变
const int *p;//常量指针