有什么区别:
char * const
and
const char *
有什么区别:
char * const
and
const char *
当前回答
许多答案提供了具体的技术,经验法则等,以理解变量声明的特殊实例。但是有一个通用的技巧来理解任何声明:
顺时针/螺旋规则
A)
const char *a;
根据顺时针/螺旋规则,a是指向常量字符的指针。这意味着字符是不变的,但指针可以改变。即a = "其他字符串";没问题,但[2]= 'c';将无法编译
B)
char * const a;
根据规则,a是指向字符的const指针。例如,你可以做一个[2]= 'c';但是你不能用a = "other string";
其他回答
为了避免混淆,总是附加const限定符。
int * mutable_pointer_to_mutable_int;
int const * mutable_pointer_to_constant_int;
int *const constant_pointer_to_mutable_int;
int const *const constant_pointer_to_constant_int;
const总是修改在它之前的东西(在它的左边),除非它是类型声明中的第一个东西,在那里它修改在它之后的东西(在它的右边)。
所以这两个是一样的
int const *i1;
const int *i2;
它们定义指向const int类型的指针。你可以改变i1和i2的点,但你不能改变它们的值。
这样的:
int *const i3 = (int*) 0x12345678;
定义一个指向整数的const指针,并将其初始化为指向内存位置12345678。您可以更改地址12345678处的int值,但不能更改i3所指向的地址。
const修饰符应用于紧挨着它左边的项。唯一的例外是,当它的左边没有任何东西时,它就适用于它右边的东西。
这些都是“指向常量char的常量指针”的等效方式:
Const char * Const Const char Const * Char const * const Char const const *
另一个经验法则是检查const的位置:
* =>之前存储的值为常量 * =>指针本身是常量
我猜你指的是const char *和char * const。
第一个const char *是一个指向常量字符的指针。指针本身是可变的。
第二个,char * const是一个指向字符的常量指针。指针不能改变,但它所指向的字符可以。
然后是const char * const,指针和字符不能改变。