Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ const char*是字符串还是指针_C++_String_Pointers - Fatal编程技术网

C++ const char*是字符串还是指针

C++ const char*是字符串还是指针,c++,string,pointers,C++,String,Pointers,我认为const char*表示指向不可变字符串的可变指针 但是当我这样做的时候, #include <iostream> using namespace std; const char *name1 = "Alex"; int main() { name1 = "John"; cout << name1 << endl; } #包括 使用名称空间std; const char*name1=“Alex”; int main() { name

我认为const char*表示指向不可变字符串的可变指针

但是当我这样做的时候,

#include <iostream>
using namespace std;

const char *name1 = "Alex";

int main() 
{
   name1 = "John";
   cout << name1 << endl;
}
#包括
使用名称空间std;
const char*name1=“Alex”;
int main()
{
name1=“约翰”;

cout它是一个指针,通过将它指定给“John”,您可以使它指向另一个case memory,“John”开始的地方

我想知道为什么程序将name1视为字符串并使其可变

事实并非如此,您只是为指针分配了一个新地址(John“
”的地址)。您自己说它是“一个不可变字符串的可变指针”。您修改了指针,如果您尝试实际修改指针对象,类型系统会阻止您这样做(由于常量限定符).

  • 这是一个指针
  • 指针是内存中的地址
  • 这里您将“John”的地址重新分配给name1
  • 我不知道如何打印字符,这样你才能正确地看到东西
程序中没有字符串对象

我想知道为什么程序将name1视为字符串并使其可变

*
相比,注意
常量的顺序。如果要禁止重新绑定
name1
,请使用
char*const
。另请参阅


此外,
const
不是关于一个不可变的值,而是关于一个不可变的绑定。

仅用于说明/比较(除了已经给出的答案):反例

const char *name1 = "Alex";

int main() 
{
    name1[0] = 'J';
    name1[1] = 'o';
    name1[2] = 'h';
    name1[3] = 'n';
    std::cout << name1 << std::endl;
    return 0;
}
const char*name1=“Alex”;
int main()
{
名称1[0]=“J”;
名称1[1]=“o”;
名称1[2]=“h”;
名称1[3]=“n”;

std::cout它是“字符数组,以零结尾”意义上的“字符串”,而不是
std::string
意义上的。指针是可变的。要生成常量指针,请使用
const char*const name1=“Alex”
。实际上,它是一个指向不可变字符的可变指针,该字符是可执行文件文本部分字符数组的一部分。我不认为每个人下一次的尝试都是使用
const_cast
:)@Rakete1111 Hm,你认为后面的句子不够明确吗?我只是想搞笑,我觉得没问题:)