变量和基本类型
NULL是一个预处理变量,用NULL初始化指针和用0初始化指针是一样的(但是不可以直接用值为0的int变量来初始化),应该尽量用nullptr,避免使用NULL
指向指针的指针
声明符中修饰符的个数并没有限制,当有多个修饰符连写在一起时,按照逻辑关系解释就可以了
**表示指向指针的指针,***指向指针的指针的指针
指向指针的引用
引用本身不是一个对象,因此不能定义指向引用的指针,但指针是对象,所以存在对指针的引用
const限定符
默认状态下,const对象仅在文件内有效
如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字
指针和const
指向常量的指针不能用于改变其所指对象的值,要想存放常量对象的地址,只能使用指向常量的指针
指针的类型必须与其所指对象的类型一致,但是允许令一个指向常量的指针指向一个非常量对象,指向常量的指针仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其他途径改变
常量指针必须初始化,初始化后就不许更改 写作:*const
顶层const
用名词顶层const表示指针本身是一个常量,也可以表示任意的对象是常量。名词底层const表示指针所指对象是一个常量
拷贝的时候底层const的限制不能忽略,当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换
constexpr和常量表达式
常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式
用字面值初始化的const对象是常量表达式,用被初始化的常量表达式初始化的也是
允许将变量声明为constexpr类型以便由编译器来验证变量的值是都是一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化
字面值类型
算术类型,引用和指针都属于字面值类型,自定义类,IO库,string类型不属于字面值类型,也就不能被定义为constexpr。
函数体内定义的变量并非存放在固定地址内,因此constexpr指针不能指向这样的变量
处理类型
类型别名: