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
您的输出是一个字符,因为*名称是一个字符,是指针指向的字符,因此是字符串中的第一个字符。请注意:更改字符串文字是未定义的行为-它们是常量有很好的理由