有什么区别:
char * const
and
const char *
有什么区别:
char * const
and
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 *是指向const char类型的指针,而char * const是指向char类型的常量指针。
首先,被指向的值不能改变,但指针可以改变。第二,被指向的值可以改变,但指针不能改变(类似于引用)。
还有一个
const char * const
它是一个指向常量char的常量指针(因此它的任何内容都不能更改)。
注意:
以下两种形式是等价的:
const char *
and
char const *
具体的原因在c++标准中有描述,但重要的是要注意并避免混淆。我知道一些编码标准更喜欢:
char const
over
const char
(带或不带指针),这样const元素的位置与使用指针const时相同。
这里x基本上是一个字符指针,指向一个常数值 Char * const x是一个字符指针,它是一个常量,但是它指向的位置可以改变。 Const char* Const x是1和2的组合,意味着它是一个指向常量值的常量字符指针。 Const *char x将导致编译器错误。它不能被宣布。 Char const * x等于点1。
经验法则是,如果const是var名称,那么指针将是常量,但指向的位置可以改变,否则指针将指向一个常量位置,指针可以指向另一个位置,但指向的位置内容不能改变。
我记得捷克的一本关于C的书:读声明,你从变量开始向左走。 因此,对于
char * const a;
你可以读成:“a是指向char的常量指针类型的变量”,
char const * a;
你可以读成:“a是一个指向char类型常量变量的指针。我希望这能有所帮助。
奖金:
const char * const a;
您将读取为指向char类型的常量变量的is常量指针。
经验法则:从右向左阅读定义!
Const int *foo;
意思是“foo指向(*)一个不能改变的int (const)”。 对于程序员来说,这意味着“我不会改变foo所指向的值”。
*foo = 123;或者foo[0] = 123;是无效的。 Foo = &bar;是被允许的。
Int *const foo;
意思是“foo不能改变(const)并将(*)指向int”。 对于程序员来说,这意味着“我不会改变foo引用的内存地址”。
*foo = 123;或者foo[0] = 123;是被允许的。 Foo = &bar;是无效的。
Const int * Const foo;
意思是“foo不能改变(const)并将(*)指向一个不能改变的int (const)”。 对于程序员来说,这意味着“我不会改变foo所指向的值,也不会改变foo所指向的地址”。
*foo = 123;或者foo[0] = 123;是无效的。 Foo = &bar;是无效的。
另一个经验法则是检查const的位置:
* =>之前存储的值为常量 * =>指针本身是常量