如何更改传递给 C++ 函数的字符串指针的值?
How can you change the value of a string pointer that is passed to a function in C++?
我需要使用函数更改 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;
}
我希望打印出来的字样是“banana”
其他答案涉及更改参数。
我试过使用 for 循环分配字符串,并逐个元素分配,但这没有用。该值保持不变。
The function must be void, and the parameter must be a pointer to a string as shown.
根据此要求,您不能更改传递给函数的指针的值,因为它是按值传递的。
不要将指针与其指向的内容混淆。参数按值传递(除非您按引用传递它们)。制作了一个副本,您在函数中对 s
所做的任何更改都不适用于 main
.
中的指针
但是,您可以更改指针指向的字符串(因为s
指向与main
中的指针相同的字符串):
void changeToBanana(std::string *s) {
std::string str = "banana";
*s = str;
}
但是,这不是惯用的 C++。您应该传递一个引用 void changeToBanana(std::string& s)
或 return 字符串 std::string returnBanana()
.
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
.[=20= 的 local 变量]
所以调用 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);
我需要使用函数更改 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;
}
我希望打印出来的字样是“banana” 其他答案涉及更改参数。
我试过使用 for 循环分配字符串,并逐个元素分配,但这没有用。该值保持不变。
The function must be void, and the parameter must be a pointer to a string as shown.
根据此要求,您不能更改传递给函数的指针的值,因为它是按值传递的。
不要将指针与其指向的内容混淆。参数按值传递(除非您按引用传递它们)。制作了一个副本,您在函数中对 s
所做的任何更改都不适用于 main
.
但是,您可以更改指针指向的字符串(因为s
指向与main
中的指针相同的字符串):
void changeToBanana(std::string *s) {
std::string str = "banana";
*s = str;
}
但是,这不是惯用的 C++。您应该传递一个引用 void changeToBanana(std::string& s)
或 return 字符串 std::string returnBanana()
.
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
.[=20= 的 local 变量]
所以调用 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);