我試圖使能夠改變指定的字符數組C++傳遞char數組起作用,並改變它
void change_array(char *target)
{
target="hi";
}
int main()
{
char *a[2];
change_array(a[1]);
cout<<*(a[1]);
}
的內容但隨後一個[1]保持在爲0x0(無效)的含量的函數
我試圖使能夠改變指定的字符數組C++傳遞char數組起作用,並改變它
void change_array(char *target)
{
target="hi";
}
int main()
{
char *a[2];
change_array(a[1]);
cout<<*(a[1]);
}
的內容但隨後一個[1]保持在爲0x0(無效)的含量的函數
將參數傳遞給函數時,通常按值傳遞,這意味着它的值被複制。如果你想改變它,你必須通過引用來傳遞它。這同樣適用於指針,如果你想改變一個指針,那麼你需要通過參考以及通過它:
void change_array(const char*& target) { ... }
是不是我現在通過引用傳遞? – Echo
@Echo如果你只想通過引用傳遞一個字符,你可以用一個指針來實現,但是你想改變實際的指針,所以你需要通過引用傳遞整個指針。在C++中,你使用「適當的」引用而不是使用指針。 –
首先,你的函數傳遞給它的指針的拷貝,所以沒有影響在來電方看到。如果你想修改該函數的參數,傳遞一個參考:
void change_array(char*& target) { ... }
// ^
其次,你不能/不應該一個非const指針指向一個字符串綁定。改爲使用const char*
。
void change_array(const char*& target) { ... }
// ^^^^^ ^
int main()
{
const char* a[2];
change_array(a[1]);
cout<<*(a[1]);
}
它現在在工作 – Echo
你需要把它作爲一個參考:
void change_array(char*&target)
{
target="hi";
}
否則,你只會改變target
本地副本,這不會使功能以外的價值的任何差異。
試試這個設計來代替:
std::string get_string()
{
return "hi";
}
int main()
{
std::string a[2];
a[1] = get_string();
std::cout<< a[1];
}
要點:
我的實際目標不是顯示字符串,而是爲了將來的工作真正改變它 – Echo
有答案告訴你如何通過傳遞所以我會提出「你應該這樣做」的問題。答案是*幾乎可以肯定*「不,你不應該」。你爲什麼使用'char *'s,而不是'std :: string's?如果你沒有立即和迫切需要C字符串,我會建議使用'std :: string's代替。 – anjruu
不,不,我有我自己的理由使用字符串,因爲我正在寫一些像核心戰爭一樣需要逐字閱讀字符數組。 – Echo
你可以使用char **。但我會爲anjruu解決方案使用字符串。 – hetepeperfan