1

说我有

string stringInput = "hello";

alter(stringInput);

cout << stringInput;

和一个功能:

void alter(string stringIn){
     stringIn[0] = stringIn[3];
}

理想情况下,我希望 cout 制作“lello”。但现在它只是像原来一样返回“hello”。我知道这与地址和指针有关......我将如何实现这一点?

4

3 回答 3

4

您需要做的就是通过引用传递字符串:

void alter(string& stringIn){
     //          ^
     stringIn[0] = stringIn[3];
}

您还应该相应地修改您对alter().

于 2013-02-18T03:43:20.827 回答
4

这实际上只是因为创建了一个新的字符串副本以在函数中使用。要直接在函数中修改字符串,请在函数头中的字符串名称前添加一个 &,如下所示:

 void alter(string &stringIn){

通过引用传递字符串。否则,您可以只从函数返回一个字符串。

于 2013-02-18T03:44:35.677 回答
2

您的 stringIn 是一个局部变量。因此,当您将它作为值传递给函数时,它只会创建一个具有不同地址的新 stringIn。因此,您在 alter 中所做的更改只会影响新的 stringIn。您需要接收 stringIn 的引用alter以使其工作。

void alter(string& stringIn){

 stringIn[0] = stringIn[3];
}
于 2013-02-18T03:46:21.300 回答