在此代码中:
#include <iostream>
int main()
{
const char* name = "Abc";
std::cout<<*name<<std::endl;
return 0;
}
如何将指针变量不的内容更改为指向的内容?
而且,为什么我只是将A
作为此程序的输出?
感谢。
答案 0 :(得分:11)
您获得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
的指针处理你的字符串。
答案 1 :(得分:4)
您不应该尝试更改const char *变量的内容。根据定义,它是常量。如果你想要一个可变字符串,请使用std :: string,或者改为使用char * buffer []。
答案 2 :(得分:1)
你正在访问*Name
,它指的是内存中有A的第一个位置
我想要B打印*(Name+1)
等等。
如果您想更改内容,请将值指定给*姓名或*(姓名+ 1)或您想要的位置。
答案 3 :(得分:1)
更改name
的地址值,您可以将其更改为另一个字符串文字的地址:
const char* newname = "def";
name = newname;
这样名称仍然是指向const char的指针。
答案 4 :(得分:0)
你需要了解关于指针的const。
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
你的输出是A,因为* name是一个char,你的指针所指向的那个,因此是字符串中的第一个。