const - 不应该改变

Sim*_*ity 8 c++ pointers const

在运行这个C++代码时,我期望输出是Abc,但是,它是FFF,为什么呢?是不是name指着一个常数char

#include <iostream>
int main()
{
    const char* name = "Abc";
    name = "FFF";
    std::cout<<name<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ich 14

是的,const char正如你所说,它指向一个,但它不是一个恒定的指针.您正在改变您所指向的内容,而不是您所指向的内容.换句话说,在重新指定指针后,保存"Abc"的存储器仍保留字符"Abc".

对于常量指针,您需要const char* const name = "Abc";.在这种情况下,它将无法编译,因为您无法更改指针指向的内容.

通常,使用constC++中的指针和指针,您可以从右到左阅读类型名称,以了解正在发生的事情.例如,在这种const char* const情况下,您可以将其读作"指向字符常量的常量指针".有点奇怪,但它的工作原理.


Dum*_*der 6

const char*name ="Abc"; - >非常量指针 - >名称,但数据(Abc)是常量

name ="FFF" - >更改指针(名称)以指向FFF.

char *p              = "Hello";          // non-const pointer,
                                         // non-const data
const char *p        = "Hello";          // non-const pointer,
                                         // const data
char * const p       = "Hello";          // const pointer,
                                         // non-const data
const char * const p = "Hello";          // const pointer,
                                         // const data
Run Code Online (Sandbox Code Playgroud)


Nav*_*een 3

您告诉const char* name = "Abc";编译器您不会使用 .abc 更改“Abc”的内容name。但是,您可以随意更改指针以指向不同的内存位置。有关详细信息,请参阅此常见问题解答。