顶层跟底层是针对指针的 很简单 针对指针可以修改及不能修改;
指针可以改变 指针指向的内容不可以变为底层const
指针不可以改变 指针指向的内容可以改变为顶层const
怎么识别顶层const 底层const:
const优先修饰左边的值 如果左边没有值 就修饰右边的值
例如 const int* p; 左边没有值所以 const 修饰int, int const * p; const 左边有值 所以const 也是修饰int 所以这两个表达式的内容都是 指针指向的内容不可以改变 指针可以改变 所以为顶层const ;
int d = 13;
int d1 = 14;
const int* p1 = &d;
p1=&d1;//正确,可以修改p2指针的只想内容
*p1=d1;//报错 *p1表达式必须是可以修改的左值
例如 int * const p2;const 左边的值为* ,所以该表达式为底层const 指针p1的值是不能改变的;但是指针指向的内容可以修改 可以可以使用*p1 解引用修改p1指针指向的内容
int* const p2=&d;
*p2 = d1;//正确,可以修改
p2 = &d1;//错误, p2表达式必须是可以修改的左值
例如 int const * const p3; 该表达式const ,第一个const 是代表的底层const 第二个const 代表的底层const 该表达式既有底层const 也有顶层const,所以指针及指针指向的内容都不允许改变
int const* const p3=&d;
*p3 = d1;//错误, *p3表达式必须是可以修改的左值
p3 = &d1;//错误, p3表达式必须是可以修改的左值