C++ const char*是字符串还是指针
我认为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
#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
,请使用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,你认为后面的句子不够明确吗?我只是想搞笑,我觉得没问题:)