一 复合类型
引用和指针
-
引用
Int ival = 1024;
Int &refVal = ival;
引用即别名 只是给已经存在的对象取另一个名字
操作是绑定的
-
指针
指针本身就是一个对象,允许对指针赋值和拷贝,且在指针的生命周期内它可以先后指向几个不同的对象。
无需定义赋初值。若无初始化,有一个不确定的值。
double dval;
double *pd = &dval;
double *pd2 = pd;
所以是 pd指针指向dval的地址 然后 pd2指针是指向pd的指针
指针值 四种状态
- 指向一个对象
- 指向紧邻对象所占空间的下一个位置
- 空指针
- 无效指针
&和*的使用
紧随类型名:
Int &r = I; &紧随类型名,r是一个引用(加别名)
Int *p; *紧随~,p是一个指针
表达式中
P = &I; &是一个取地址符
*p = I; *是一个解引用符 (语句意思:对p指针指向的对象用i赋值)
空指针(未经初始化的指针很有可能引起运行错误)
Int *p1 = nullptr;
Int *p2 = 0;
空指针必须是指向不能被变量分配到的地址。
程序员请求一个空指针时,无论写“0“还是“NULL”,都是有编译器来生成适合机器的空指针的二进制表达形式
利用空指针(NULL)而非0,提高程序运行效率
复合类型的声明
Int* p1,p2;
P1是指向int的指针,p2是int
Int ival = 1024;
Int *pi = &ival;
Int **ppi = π
Pi指向int型数,ppi指向int型指针的指针
因为指针也是对象,所以可以对指针进行引用
Int I = 42;
Int *p;
Int *&r = p; 对指针的引用
r = &I; 对r赋值,就是使p指向i
*r = 0; 解引用r得到i,也就是p指向的对象,使得i的值改为0
二 const限定符
Const限定符对变量的类型加以限定,值无法变化,必须初始化。
-
const的引用
const int ci = 1024;
const int &r1 = ci;
对常量的引用
非常量的引用不能指向一个常量对象
-
const和指针
指向常量的指针
const double pi = 3.14;
const double *cptr = π
同样的,常量非常量需要对应,且不能改变。
Const指针(常量指针)
Const double pi = 3.14159;
Const double *const pip = π
三 处理类型
-
类型别名
Typedef double wages; wages与double同义
Typedef wages base, *p; base是double的同义词,p是double*的同义词
新方法 别名声明
Using SI = Sales_item;
2 类型别名与指针
Typedef char *pstring;
Const pstring cstr = 0; cstr是指向char的常量指针
Const pstring *ps; ps是一个指针,对象是指向char的常量指针
四 其他
1 decltype类型指示符
decltype(f()) sum =x; sum的类型就是函数f的返回类型
2.自定义数据结构