簡體   English   中英

在 C++ 中通過引用傳遞字符串類變量

[英]Pass string class variable by reference in C++

看下面的代碼:

#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)而不僅僅是void reverseStr(string arr, int start, int end) 為什么我必須使用額外的&非正式的參數? 字符串變量不就是其他數組嗎?

如何在C++中通過引用傳遞字符串?

您只需將&添加到參數。

字符串是普通數組嗎?

不, std::string不是數組。

在函數參數中使用&引用,這意味着您傳遞對在主函數中初始化的字符串的引用。 沒有&您只會傳遞一個副本,並且您在副本中所做的更改不會反映在原始副本中。

電話也應該是:

reverseStr(str, 0, 2);

范圍 0 到 2,或者更好:

reverseStr(str, 0, str.size() - 1);

正如您通過使用.size()方法所看到的, std::string不是char數組,它是類模板std::basic_string<char>typedef

https://pt.cppreference.com/w/cpp/string 中了解有關 C++ 字符串類型的更多信息

C++ 中引用的語法是

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

您可以將arr視為一個指針,它會自動取消引用。

有關參考資料的更多信息,請參閱此處

您必須通過引用傳遞,因為這就是語言的設計方式。

你的“字符串是數組”的理論是不正確的。 字符串就是字符串。

確實,由於歷史原因,按值傳遞 C 數組實際上似乎是按引用傳遞它們(實際上數組的名稱正在衰減為指針)。 但這不是你在這里所擁有的,這不是語言的其余部分的工作方式。

如果按值傳遞,通常會得到一個副本 所以你的函數在副本上運行。 傳遞引用意味着您對原始對象進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM