如果我想改变一个字符串中的一个字符,我可以这样做:
#include <iostream>
#include <string>
using namespace std;
int main() {
string mystring = "Hello";
mystring[0] = 'T';
cout << mystring;
return 0;
}
字符串
如果我想用另一个函数改变字符串中的i个字符:
#include <iostream>
#include <string>
using namespace std;
void changeStr(string* mystring);
int main() {
string mystring = "Hello";
changeStr(&mystring);
cout << mystring;
return 0;
}
void changeStr(string* mystring)
{
mystring[0] = 'T';
}
型
为什么不工作?整个字符串都变成了“T”。我是编程新手,在指针/地址方面仍然有一些问题。我知道一个char(char[])数组是指向它的第一个索引的指针。这也适用于字符串吗?我该怎么办?
2条答案
按热度按时间xoefb8l81#
对于初学者来说,通过指向对象的指针将
std::string
类型的对象传递给函数没有意义。您可以通过引用传递它。所以这个函数看起来像字符串
相应地,该函数的调用方式如下
型
至于你的问题,那么首先你需要解引用指针,然后才能应用下标运算符
型
或者你可以写
型
请注意,后缀下标运算符的优先级高于解引用运算符。
至于你演示程序中的语句内的函数
型
然后实际上它使用赋值运算符将字符
'T'
赋值给字符串型
而不是仅分配字符串的第一个字符。
也就是说,在此语句之后,字符串将等于
"T"
。如果在
main
中写入也是一样的型
表达式
*mystring
和mystring[0]
(其中mystring
的指针类型为std::string *
)是等效的。在函数中你甚至可以写型
代替了
型
虽然正如我前面指出的,通过引用传递字符串要好得多。
webghufk2#
你不需要传递指针。简单地通过引用传递它(引用将更新值),如果你通过指针传递它,然后返回字符串而不是void。更好的选择通过引用传递
字符串