防止忘记,记下来(滑稽)
const int* p和int const *p:
表示指针p指向一个const int 型的数据,所以不能通过指针修改所指向的值,指针的指向可以变化。
int* const p:
表示指针p是const型的,所以p的指向不可改变,但可以修改指向的值。
const int * const p:
表示这是一个const型的指针且指向一个const int型的数据,所以既不可以改变指向的值,又不可以改变指向。
代码实例:
#include<iostream>
int main()
{
int a=1;
int b = 1;
const int *p1 = &a;
int const *p2 = &a;
int * const p3 = &a;
const int * const p4 = &a;
*p1 = 2; //报错
*p2 = 2; //报错
*p3 = 2;
*p4 = 2; // 报错
p1 = &b;
p2 = &b;
p3 = &b; //报错
p4 = &b; //报错
return 0;
}
在vs2017的环境下报错信息都为表达式应为可修改的左值。
与预期结果相同。
总的来说:看const的位置在*的前面还是后面来区分其修饰的是指向的数据还是指针。