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情况下,您可以将其读作"指向字符常量的常量指针".有点奇怪,但它的工作原理.
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)