const char* a和char* const a的区别

如题所述

第1个回答  2019-05-22
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也不可改变。
相似回答