C 中的陣列賦值困境
在C 中,將一個陣列直接賦值給另一個陣列是不可行的,並且出現錯誤訊息“Error C2106” : 遇到“=”:左操作數必須是左值。這個問題源自於 C 中數組由於與 C 的兼容性而產生的特殊行為。
理解行為
C 中的數組由於繼承自而不可分配C的數組實作。數組表示為其第一個元素的衰減引用,使它們成為不可修改的左值。換句話說,數組不能像常規變數一樣分配給其他物件。
解決方案
要在C 中使用類似數組的功能,標準模板中的替代容器推薦使用庫(STL),例如std::array 或std ::vector。這些 STL 容器允許類似陣列的行為,同時提供賦值功能。
std::array 示例
#include <array> int main() { std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; }
數組的回退
如果無法使用STL 容器,請使用循環或函數手動複製數組元素像std::copy 是必要的。
陣列複製範例
#include <algorithm> int main() { int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values); }
附加說明
值數組可以使用空的初始值設定項列表進行初始化,如下所示,依賴聚合的標準定義值初始化規則,它將未指定的元素初始化為零。
int values[5] = {};
以上是為什麼我不能在 C 中直接對數組進行賦值,有哪些替代方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!