指针常量与常量指针的区别

// 指针常量与常量指针的区别

// 对象非const
//
int a = 1;
int b = 1;

// 允许修改指针指向对象的值、指针的地址
int *p = &a;

// eg.1 允许修改指针指向对象的值,而不能修改指针指向的地址,即:指针常量
int *const p1 = &a; // error: p1 = &b;

// eg.2 允许修改指针指向的地址,而不能修改指针指向的地址的值,即:常量指针
const int *p2 = &a; // error: *p2 = 100;

// eg.3 等同于eg.2,允许修改指针指向的地址,而不能修改指针指向的地址的值
int const *p3 = &a; // error:*p3 = 100;

// 对象为const
// 指向const对象的指针,必须同为const,否则C++编译出错
int const c = 1; // error:int *p = &c;
int const d = 1;

// eg.4 与eg.2相似,允许修改指针指向的地址,而不能修改指针指向的地址的值
const int *p4 = &c; // error:*p4 = 100;

// eg.5 等同于eg.4,允许修改指针指向的地址,而不能修改指针指向的地址的值
int const *p5 = &c; // error:*p5 = 100;

// 最后一种
// eg.6 不允许修改指针指向的地址,以及指针指向的地址的值
const int *const p6 = &a; // error:p6 = &b; *p6 = 100; 这都是错误的

原文地址:https://www.cnblogs.com/rightnow/p/2680514.html