[在C ++中通过引用传递字符串类变量

问题描述 投票:0回答:2

看下面的代码:

#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。

问题:如何在C ++中通过引用传递字符串?字符串是正常数组吗?如果是,则引用必须自动传递,而只是在形式参数中创建一个副本。

编辑:

我的问题是,为什么我必须使用void reverseStr(string &arr, int start, int end)之类的函数,而不仅仅是void reverseStr(string arr, int start, int end)。为什么我必须使用额外的&非正式参数?字符串变量不只是其他数组吗?

c++ string
2个回答
0
投票

C ++中引用的语法为

void reverseStr(string &arr, int start, int end);

您可以将arr视为指针,它会自动取消引用。

有关参考文献here的更多信息。


0
投票

您必须通过引用传递,因为这是语言的设计方式。

您的“字符串是数组”的理论是不正确的。字符串是字符串。

确实,由于历史原因,通过值actually]传递C数组似乎是通过引用传递它们(实际上,数组的名称正在衰减为指针)。但这不是这里的内容,也不是其余语言的工作方式。

如果按值传递,通常会得到一个副本

。因此,您的功能是对副本进行操作。传递引用意味着您将对原始对象进行操作。

-1
投票

参考功能参数中的&

© www.soinside.com 2019 - 2024. All rights reserved.