我正在学习C++,我不能使用指针访问参考吗?(举个例子)

I am studying C++, Can't I access reference by using pointer? (having an example)

本文关键字:参考 指针 学习 C++ 不能 访问      更新时间:2023-10-16

好的,我已经使用C3年了。 我的专业是嵌入式系统工程 就在几天前,我对图像处理产生了兴趣。 所以我正在学习C++。

我想在使用复制构造函数时更改最后一个字符。 像这些 -> 大炮1 大炮2 大炮3(大炮只是名字( 所以我像在 C 中一样使用 While 的指针。

Photon_Cannon::Photon_Cannon(int x, int y, char *cannon_name)
{
int i = 0;
hp = shield = 100;
coord_x = x;
coord_y = y;
damage = 20;
name = new char[strlen(cannon_name) + 1];
strcpy(name, cannon_name);
}

这是原始代码(正常工作(

我在复制构造函数部分的末尾附加了一些代码。

while (*name!=NULL) {
name++;
}
*name+=1;

但这行不通!:(

帮帮我。。。

尝试使用std::string而不是char*

Photon_Cannon::Photon_Cannon(int x, int y, const std::string& cannon_name)

将成员变量name更改为std::string,然后您可以轻松地分配字符串的

name = cannon_name;

然后更改最后一个字符

name[name.length() - 1] = '2';

name.pop_back();
name += "2";

不要忘记包含字符串。

或带字符*

name[strlen(name) - 1] = '2';

不要忘记检查数组/字符串的大小,name.length() > 0),(int(strlen(name(>1,...

我建议您阅读一些c ++教程,例如 C++字符串。

我是堆栈溢出的新手,所以我希望它能帮助您:)。

这不是作为答案,只是作为菲利普已经给出的答案(以及那里的评论(的旁注:

void f(std::string const& s)

这是传递 std::string 对象的常用方法,因为它避免了创建不必要的副本(花费运行时和内存(。如果你真的想修改字符串(传递给f的字符串对象可以看到更改(,请保留 const 修饰符。

现在我们有一个特例:

void f(std::string const& s)
{
std::string ss(s); // creates a COPY!
// modify the copy ss...
}

显然,副本是要修改的,但更改对传递给的原始字符串对象不可见。如果我们不再需要访问原始字符串(s(,那么只有这样,值传递字符串才有意义

void f(std::string /*const&*/ s) // creates the COPY already when passing
{
/* std::string ss(s); // creates a COPY! */ // <- don't need it any more
// modify the COPY s now...
}

旁注:真正将常量引用保留为上述注释(/*const&*/(将表达(并且应该足够(传递值是故意完成的......