2.3.1 引用
左值引用,右值引用
引用并非对象,相反的,它只是为了一个已经存在的对象所起的另外一个名字。
int i = 20; double c = 2.25; int &a = 10;//错误:引用不能与字面值或某个表达式计算值绑定 int &a = i;//a是引用,i是对象 int &a = c;//错误:所有引用类型都需要与对象类型匹配
2.3.2 指针
指针与引用的不同:
指针的值(即地址)有以下几种状态:
1.指向一个对象。
2.指向紧临对象所占空间的下一个位置。
3.空指针,意味着指针没有指向任何对象。
4.无效指针,也就是上述情况以外的其他值。
试图拷贝或访问无效指针都将引发错误,编译器不负责检查此类错误。
5.空指针:
int *p1 = nullptr; int *p2 = 0;//需要首先#include <csdlib> int *p3 = NULL;
NULL为预处理变量,C++中在cstdlib中,#define NULL 0
6.void*指针
可以存放任意类型的地址,但我们不知道这个指针的类型。
2.3.3 理解复合类型的声明
int i=1024,*p=&i,&r=i;
在同一条定义语句中,虽然基本数据类型只有一个,但是声明符的形式却可以不同。
int*p中int是基本数据类型,*是类型修饰符(解引用符),类型修饰符是声明符的一部分,p是变量标识符。
(从右到左)