[英]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.