我需要使用函数更改std::string的值。
函数必须是空的,参数必须是指向字符串的指针,如图所示。
#include <iostream>
void changeToBanana(std::string *s) {
std::string strGet = "banana";
std::string strVal = strGet;
s = &strVal;
}
int main() {
std::cout << "Hello, World!" << std::endl;
std::string strInit = "apple";
std::string* strPtr;
strPtr = &strInit;
changeToBanana(strPtr);
std::cout << *strPtr << std::endl;
return 0;
}我希望得到的打印结果是“香蕉”,其他答案涉及更改参数。
我尝试过使用for循环分配字符串,然后逐个元素执行元素,但这不起作用。价值保持不变。
发布于 2022-03-30 14:09:39
函数必须是空的,参数必须是指向字符串的指针,如图所示。
使用此要求,您不能更改传递给函数的指针的值,因为它是通过值传递的。
不要把指针和它所指的混淆起来。参数是通过值传递的(除非通过引用传递它们)。在函数中对s所做的任何更改都不适用于main中的指针。
但是,您可以更改指针指向的字符串(因为s指向与main中的指针相同的字符串):
void changeToBanana(std::string *s) {
std::string str = "banana";
*s = str;
}然而,这不是惯用的C++。您应该传递一个引用void changeToBanana(std::string& s)或返回字符串std::string returnBanana()。
发布于 2022-03-30 14:16:52
void changeToBanana(std::string *s) {
std::string strGet = "banana";
std::string strVal = strGet;
// the following line doesn't do anything
// useful, explanation below
s = &strVal;
}s = &strVal将strVal的地址分配给s。然后函数结束,对s的任何修改都被“遗忘”,因为s是changeToBanana的局部变量。
因此,打电话给changeToBanana(&foo)什么都不做。
你要么想要这个:
void changeToBanana(std::string *s) {
*s = "banana";
}
...
std::string strInit = "apple";
changeToBanana(&strInit); 或者这个(因为您不需要指针):
void changeToBanana(std::string & s) {
s = "banana";
}
...
std::string strInit = "apple";
changeToBanana(strInit);https://stackoverflow.com/questions/71678559
复制相似问题