说我有
string stringInput = "hello";
alter(stringInput);
cout << stringInput;
和一个功能:
void alter(string stringIn){
stringIn[0] = stringIn[3];
}
理想情况下,我希望cout产生“lello”。但是现在它只是像原来那样返回“你好”。我知道这与地址和指针有关......我将如何实现这一目标?
答案 0 :(得分:4)
您需要做的就是通过引用传递字符串:
void alter(string& stringIn){
// ^
stringIn[0] = stringIn[3];
}
您还应该相应地修改alter()
的所有函数声明。
答案 1 :(得分:4)
实际上,这只是因为创建了一个新的字符串副本以供在函数中使用。要在函数中直接修改字符串,请添加&amp;在函数头中的字符串名称之前,如下所示:
void alter(string &stringIn){
通过引用传递字符串。否则你只能从函数中返回一个字符串。
答案 2 :(得分:2)
您的stringIn是一个局部变量。因此,当您将函数作为值传递给它时,它只会生成一个具有不同地址的新stringIn。因此,您在alter中所做的更改只会影响新的stringIn。您需要在alter
中接收stringIn的引用才能使其正常工作。
void alter(string& stringIn){
stringIn[0] = stringIn[3];
}