我正在学习C++,我不能使用指针访问参考吗?(举个例子)
I am studying C++, Can't I access reference by using pointer? (having an example)
好的,我已经使用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&*/
(将表达(并且应该足够(传递值是故意完成的......
相关文章:
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 类的方法和对象。参考?智能指针?简单的初始化?
- 我正在学习C++,我不能使用指针访问参考吗?(举个例子)
- 使用指针向量到参考向量是非法的吗?
- 函数参数绑定通过参考与传递指针传递数组的规则
- 参考参考static_cast的成本和指向指针static_cast的指针
- 函数采用原始指针试图通过错误msg中概述的参考来接受指针
- 为什么即使传递给函数作为参考,指针也未被分配
- 为什么通用参考概念不适用于函数指针的地图插入
- 是指代指针正交的参考文献
- 超载函数既不按值,也不是通过参考来对象,而是将撤销的指针换成对象
- 从参考中获取的指针可以在定义明确的C 中取无效
- 指针与参考示例,在什么情况下更好
- 为什么要拿参考的地址给我一个第二等级的指针
- 如何提升::序列化指针和参考
- 在范围外丢失指针参考
- 为什么动态演员只能与参考和指针一起使用
- 为什么该函数不会获得动态数组?(我正在使用指针和参考)
- 如果我创建一个模板类,而不是其他我将参考(指针)发送到该类的类
- 通过静态局部变量的参考/指针返回