指针声明的格式如下:
数据类型 *变量名;
const限定符声明并初始化常量的格式如下:
const 数据类型 变量名 = 常量;
const限定符和指针的组合有如下三种:
指向const对象的指针
const 类型名称 *指针名;
例子:
const int *i;
首先,变量i之前有指针运算符*,表明i是指针;在指针运算符的*的左边是const int,表明指针i指向的是对象是int类型,并且具有const特性,即const对象。也就是说此时的i必须只想具有const特性的int类型。但是,此时i也可以指向非const 的int类型,这是因为无论i只想什么样的int类型,都将指向的对象当成具有const特性。所以,这种情况下是不能通过i这个指针来改变所指向的对象的值。顺便一提,指向const特性的对象的指针必须具有const特性。
const指针
类型名称 *const 指针名 = 指针;
例子:
int a = 1;
int *const i = &a;
指针运算符*的左边是int类型,所以指针i指向的对象的类型是int;左边是限定符const,表明指针i具有const特性,一经赋值,不可更改,但可以通过指针i来改变a的值,因为指针i指向的对象a并不是const对象。也就是说此时的指针是const指针。
指向const对象的const指针
const 类型名称 *const 指针名=指针;
例子:
const int a = 1;
const int *const i = &a;
此时,指针i指向的对象是const对象,同时指针i本身也具有const特性。也就是指针i一经赋值就不可更改,也不可以通过指针i来更改指向对象的值。
总结
指针运算符*将类型名称和指针名分开,指针运算符*左边限定的是指针指向的对象,右边限定的是指。限定符const既可以在类型名称前出现,也可以在指针名之前出现,限定符在谁之前出现就限定的谁,谁具有const特性。