const char* a和char* const a的区别
展开全部
const char* a : 底层const
char *const a : 顶层const
底层const是说:
一个指针指向的对象的值,不可通过这个指针改变,或者一个左值引用绑定的对象的值,不可通过这个引用改变。
比如:
char z;
const char *a = &z;
char *b = &z;
const char &c = z;
char &d = z;
const限定:不可通过为*a和c赋值来改变z的值,但是可以通过*b和d改变z的值。
顶层const是说这个变量本身不可改变。
比如:
char *const a,这里const限定a不可改变。
1. 由于引用不是对象,只是别名,所以它只有底层const。
const int &e = z; // 不可通过为e赋值改变z的值。
2. 既不是指针也不是引用的变量,只有顶层const。
const int f = 10; // f本身不可改变。
3. 指针既可以有底层const也可以有顶层const,二者可以同时出现:
int *const g; // 顶层const,g本身不可改变。
const int *h; // 底层const,h指向的值,即*h不可改变。
const int *const i; // 底层+顶层const,i本身不可改变,*i也不可改变。
char *const a : 顶层const
底层const是说:
一个指针指向的对象的值,不可通过这个指针改变,或者一个左值引用绑定的对象的值,不可通过这个引用改变。
比如:
char z;
const char *a = &z;
char *b = &z;
const char &c = z;
char &d = z;
const限定:不可通过为*a和c赋值来改变z的值,但是可以通过*b和d改变z的值。
顶层const是说这个变量本身不可改变。
比如:
char *const a,这里const限定a不可改变。
1. 由于引用不是对象,只是别名,所以它只有底层const。
const int &e = z; // 不可通过为e赋值改变z的值。
2. 既不是指针也不是引用的变量,只有顶层const。
const int f = 10; // f本身不可改变。
3. 指针既可以有底层const也可以有顶层const,二者可以同时出现:
int *const g; // 顶层const,g本身不可改变。
const int *h; // 底层const,h指向的值,即*h不可改变。
const int *const i; // 底层+顶层const,i本身不可改变,*i也不可改变。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询