有什么区别:
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 * char是无效的C代码,没有意义。也许你想问const char *和char const *之间的区别,或者可能是const char *和char * const之间的区别?
参见:
什么是const指针(相对于指向const对象的指针)? C中的Const c++中const声明的区别 c++的const问题 为什么我可以改变一个const char*变量的值?
const总是修改在它之前的东西(在它的左边),除非它是类型声明中的第一个东西,在那里它修改在它之后的东西(在它的右边)。
所以这两个是一样的
int const *i1;
const int *i2;
它们定义指向const int类型的指针。你可以改变i1和i2的点,但你不能改变它们的值。
这样的:
int *const i3 = (int*) 0x12345678;
定义一个指向整数的const指针,并将其初始化为指向内存位置12345678。您可以更改地址12345678处的int值,但不能更改i3所指向的地址。
Const char*是一个指向常量字符的指针 Char * const是一个指向字符的常量指针 Const char* Const是一个指向常量字符的常量指针
我记得捷克的一本关于C的书:读声明,你从变量开始向左走。 因此,对于
char * const a;
你可以读成:“a是指向char的常量指针类型的变量”,
char const * a;
你可以读成:“a是一个指向char类型常量变量的指针。我希望这能有所帮助。
奖金:
const char * const a;
您将读取为指向char类型的常量变量的is常量指针。
区别在于const char *是指向const char类型的指针,而char * const是指向char类型的常量指针。
首先,被指向的值不能改变,但指针可以改变。第二,被指向的值可以改变,但指针不能改变(类似于引用)。
还有一个
const char * const
它是一个指向常量char的常量指针(因此它的任何内容都不能更改)。
注意:
以下两种形式是等价的:
const char *
and
char const *
具体的原因在c++标准中有描述,但重要的是要注意并避免混淆。我知道一些编码标准更喜欢:
char const
over
const char
(带或不带指针),这样const元素的位置与使用指针const时相同。