C++ Primer
第2章 变量和基本类型
基本内置类型
变量
-
对象:能存储数据并具有某种类型的内存空间
复合类型
引用 &d
-
引用 = 起别名,&d的形式
-
必须初始化,且必须是一个对象,不能是值,初始化后引用的对象不可更改
-
类型匹配
指针 *d
-
指针存放某个对象的地址,用&获取该地址
-
当指针指向一个对象时,用解引用符*访问这个对象
-
空指针(初始化)
-
int *p = nullptr;
-
int *p = 0;
-
-
两个指针相同的可能
-
都为空
-
都指向同一个对象
-
指向同一个对象的下一地址
-
有可能相同的情况:一个指向同一个对象,另一个指向同一个对象的下一地址
-
-
void*指针
-
可以存放任意类型对象的地址
-
指向指针的指针
-
*的个数区分指针的级别
-
**p表示指向指针的指针
-
***p表示指向指针的指针的指针
-
指向指针的引用
-
int i = 42; int *p;//p是一个int型指针 int *&r = p;//r是指针p的引用 //理解r是什么?从右向左阅读r的定义,离变量名最近的符号&说明r是一个引用,*说明r引用的是一个指针
const限定符
初始化
-
创建const对象必须初始化
-
const一般仅在文件内有效,如果想多文件共享const对象,定义之前应该加上extern关键字
-
extern const int bufSize = ;
-
引用常量
cosnt int ci = 1024; const int &r1 = ci;//正确,引用是常量,引用的对象也是常量 int &r2 = ci;//错误,非常量引用指向一个常量对象
初始化和对const的引用
-
引用常量的一个例外
-
常量引用指向非常量
-
int i = 42; const int &r1 = i;//正确 int &r2 = r1 * 2;//错误,非常量引用指向常量引用
-
-
-
总结:非常量引用不能指向常量对象;不能通过常量引用修改指向非常量对象的值,但可以通过修改非常量对象的值修改
-
int i = 1; int &r1 = i; const int &r2 = i; r1 = 0;//正确 r2 = 0;//错误,不能通过常量引用修改对象的值
-
指针和const
-
指向常量对象的只能是常量指针,普通指针不可以
-
一般指针的类型和所指对象的类型一致
顶层/底层const
-
顶层const:指针本身是个常量
-
底层const:指针指向的对象是个常量
-
区分顶层还是底层
-
const默认作用于其左边的东西,否则作用于其右边的东西
constexpr
-
认定变量是一个常量表达式,就声明为constexpr
类型别名
-
typedef double wages;
auto类型说明符
-
必须有初始值
-
auto会忽视顶层const,保留底层const
decltype类型指示符
-
decltype(a) x = 0;//取a的类型为x赋予类型,x的初始值为0
自定义数据结构
编写头文件
预处理器
-
头文件保护符
-
#define
-
#ifdef变量已定义时为真
-
#ifndef变量未定义时为真
-
检查结果为真,则执行至#endif停止
-