#include <iostream>
#include <string>
using namespace std;
void reverseStr(string arr, int start, int end)
{
while (start < end)
{
swap(arr[start], arr[end]);
++start;
--end;
}
}
int main()
{
string str = "CPP";
reverseStr(str, 0, 3);
cout << str;
return 0;
}
输出为CPP,而预期为PCC。
我的问题是,为什么我必须使用void reverseStr(string &arr, int start, int end)
之类的函数,而不仅仅是void reverseStr(string arr, int start, int end)
。为什么我必须使用额外的&
非正式参数?字符串变量不只是其他数组吗?
您必须通过引用传递,因为这是语言的设计方式。
您的“字符串是数组”的理论是不正确的。字符串是字符串。
确实,由于历史原因,通过值actually]传递C数组似乎是通过引用传递它们(实际上,数组的名称正在衰减为指针)。但这不是这里的内容,也不是其余语言的工作方式。
如果按值传递,通常会得到一个副本
。因此,您的功能是对副本进行操作。传递引用意味着您将对原始对象进行操作。参考功能参数中的&
。