C++ 更改指针变量的内容

C++ 更改指针变量的内容,c++,pointers,C++,Pointers,在此代码中: #include <iostream> int main() { const char* name = "Abc"; std::cout<<*name<<std::endl; return 0; } #包括 int main() { 常量字符*name=“Abc”; std::cout您将获得一个char,因为您正在反引用一个char*指针 您可以通过执行以下操作更改内容: *a = 'B'; // your char* would conta

在此代码中:

#include <iostream>
int main()
{
const char* name = "Abc";
std::cout<<*name<<std::endl;
return 0;
}
#包括
int main()
{
常量字符*name=“Abc”;

std::cout您将获得一个
char
,因为您正在反引用一个
char*
指针

您可以通过执行以下操作更改内容:

*a = 'B'; // your char* would contain "Bbc"
a[0] = 'B'; // your char* would contain "Bbc"
a[1] = 'B'; // your char* would contain "ABc"
a[2] = 'B'; // your char* would contain "AbB"
但是,更改字符串文字的内容在C中有一个未定义的行为。因此,您不应该这样做。相反,您需要动态填充
char*
。使用类似的方法:

char *a;
a = malloc(sizeof(char)*100); // a string with a maximum of 99 chars
strcpy(a, "Abc");
// now you can safely change char* contents:
a[0] = '1';
a[1] = '1';
a[2] = '1';
printf("%s", a); // will print 111

C这样的语言中,字符串操作并不是那么容易。因为您使用的语法似乎是用C++编译器编译代码,那么您可以尝试使用
String
类,而不是使用指向
char
的指针来处理字符串。

您正在访问
*Name
指内存中第一个具有 我建议您打印
*(名称+1)


如果要更改内容,请将值指定给*Name或*(Name+1)或任何您想要的位置。

您不应该尝试更改常量char*变量的内容。根据定义,它是常量。如果要可变字符串,请使用std::string或分配char*缓冲区[]相反。

要更改
name
的地址值,可以更改为另一个字符串文本的地址:

const char* newname = "def";
name = newname;

这样名称仍然是指向常量字符的指针。

您需要了解常量与指针的关系

const char*表示指向无法修改但可以移动的数据的指针

const char * name = "Abc";
name = "Def"; // allowed
name[1]='B'; // compiler error
如果需要无法移动的指针,请使用

 const char * const name = "Abc"; // cannot move to point at something else
 char data[] = "ghi";
 char * const name = &data[0]; 
 name[1] = 'H'; // permitted
 name = &data[1]; // not allowed as name is a constant pointer

您的输出是一个字符,因为*名称是一个字符,是指针指向的字符,因此是字符串中的第一个字符。

请注意:更改字符串文字是未定义的行为-它们是常量有很好的理由