有什么区别:

char * const 

and

const char *

当前回答

const修饰符应用于紧挨着它左边的项。唯一的例外是,当它的左边没有任何东西时,它就适用于它右边的东西。

这些都是“指向常量char的常量指针”的等效方式:

Const char * Const Const char Const * Char const * const Char const const *

其他回答

为了避免混淆,总是附加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和*之间,它将影响最近的一个。

e.g.

Char const *。这是一个指向常量char的指针。 Char * const。这是一个指向char类型的常量指针。

Char * const和const Char *?

指向一个常数值

Const char * p;// value不能更改

指向值的常量指针

Char * const p;//地址不能更改

指向常量值的常量指针

Const char * Const p;//两者都不能改变。

许多答案提供了具体的技术,经验法则等,以理解变量声明的特殊实例。但是有一个通用的技巧来理解任何声明:

顺时针/螺旋规则

A)

const char *a;

根据顺时针/螺旋规则,a是指向常量字符的指针。这意味着字符是不变的,但指针可以改变。即a = "其他字符串";没问题,但[2]= 'c';将无法编译

B)

char * const a;

根据规则,a是指向字符的const指针。例如,你可以做一个[2]= 'c';但是你不能用a = "other string";