更改指针变量的内容

时间:2011-01-28 11:21:30

标签: c++ pointers

在此代码中:

#include <iostream>
int main()
{
const char* name = "Abc";
std::cout<<*name<<std::endl;
return 0;
}

如何将指针变量的内容更改为指向的内容?

而且,为什么我只是将A作为此程序的输出?

感谢。

5 个答案:

答案 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,你的指针所指向的那个,因此是字符串中的第一个。