在定义指针时,如果使用const进行修饰,根据const出现的位置和const出现的次数我们可以分为三种情况:一、指向常量的指针,二、常指针,三、指向常量的常指针。
一、指向常量的指针。
定义形式:const 类型名 * 指针名 (也可以写做类型名 const * 指针名)
例如:int a = 3, b = 2; const int * p = &a; (int const * p = &a;)
这里指针p本身是变量,我们还可以用它指向其他的变量,但是不能用它来修改a的值,比如*p=2;这种行为是不允许的,不过我们可以将p指向b这个变量,但是值得注意的是a是变量,我们可以通过a=2;来修改a的值。
二、常指针。
定义形式:类型名 * const 指针名 = 地址值
例如:int a = 3, b = 2;int * const p = &a;
这里指针p是一个常量,我们不能把他指向其他的变量了比如说b,但是他指向的地方是一个变量,也就意味着我们可以进行*p=2;这种行为去改变a的值,但是不能进行p=&b;这种行为了。因为p是一个常量,我们必须在定义的时候进行初始化。
三、指向常量的常指针。
定义形式:const 类型名 * const 指针名 =地址值
例如:int a = 3, b = 2;const int * const p = &a;
这里不仅仅p是一个常量,并且p指向的内容*p也是不能进行修改的,所以p必须在定义的时候进行初始化。也就是说我们不能进行*p=2;和p=&b;这两种行为,但是要注意a不是一个变量,我们可以通过a=2;这种行为来修改a的值,相对应的*p也会变成2。