簡體   English   中英

將char數組賦給文字字符串 - c ++

[英]assign a char array to a literal string - c++

char arr[3];
arr="hi";// ERROR
cin>>arr;// and at runtime I type hi, which works fine.

1)有人可以向我解釋原因嗎?

2)什么是“hi”的類型,我知道它叫做文字字符串。 但它只是一系列的字符嗎?

3)不是cin >> arr; 就像在運行時鍵入arr一樣?

C ++中的數組不是實際類型,只是一系列值的結構化表示,而不是指針,如果你應該在任何地方找到它們(它們會衰減成指針)。 您不能像使用其他類型一樣使用它們,包括分配。 選擇是為數組添加大量支持,或者盡可能簡單快速地保持它們。 選擇了后者,這是C ++與其他語言的區別之一。

要復制數組,請一次復制一個元素。

在C ++ 11中,有一個STL容器std::array 它被設計成適合作為運算符重載的普通數組,以及與STL的其余部分相關。

更好的選擇是std::string 它結合了您想要的行為和更多,並專門用於保存字符數組。

正如康拉德魯道夫所指出的那樣,“你好”是一個const char [3]

至於cin荷蘭國際集團原始陣列,因為沒有提供用於過載它不是通過標准方法可能cin與陣列。 雖然可以創建自己的重載。 但是,我不確定如何解釋傳遞的不同大小的數組,除非您為知道其大小而不是原始數組的容器定義它。

如果您願意,可以聲明:

char array[] = "hi!";

創建一個數組並將其“初始化”為4個字節,“嗨!”

char const *array2 = "hey!";

創建一個指向只讀內存的指針,一個字符串文字

array2 = array;

您現在可以使用array2指針訪問第一個數組。 這稱為指針衰減; array和array2的類型不同,即使它們可以在這里合作。 char類型的數組 “衰減”到char類型的指針

array = array2; // ERROR

數組不是指針。 你認為數組是一個指針,實際上,它是預先分配的。 您正在嘗試分配一個地址,但是array []在創建時已經有一個“硬編碼”,並且無法更改。

暫無
暫無

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

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