Array dalam C mempamerkan tingkah laku yang pelik, salah satunya ialah kebolehtugasan terhadnya. Mari kita siasat mengapa menetapkan satu tatasusunan kepada tatasusunan yang lain adalah dilarang, seperti yang digambarkan oleh kod berikut:
int numbers[5] = {1, 2, 3}; int values[5] = {0, 0, 0, 0, 0}; values = numbers; // Error: C2106
Kod ini menjana ralat "ralat C2106: '=' : operan kiri mestilah nilai-l," memberi isyarat percubaan untuk menetapkan kepada objek yang tidak boleh diubah suai.
Ralat timbul kerana tatasusunan dalam C dianggap tidak boleh diubah suai atau tidak boleh diserahkan, terutamanya disebabkan keserasian ke belakang dengan C. Menugaskan satu tatasusunan kepada tatasusunan yang lain memerlukan penyalinan semua elemennya, yang sangat tidak cekap dan mudah ralat.
Sebaliknya, C menggalakkan penggunaan bekas daripada Pustaka Templat Standard (STL), seperti std::array atau std::vector, yang menyediakan keupayaan seperti tatasusunan yang cekap dan selamat jenis. Contohnya, menggunakan std::array untuk mencapai kefungsian yang diingini:
#include <array> std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; // No error!
Dalam kes tatasusunan primitif (seperti yang terdapat dalam kod asal), anda boleh menyalin elemen secara manual menggunakan gelung atau memanfaatkan std::copy function:
#include <algorithm> int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values);
Selain itu, kod yang disediakan menunjukkan jalan pintas untuk memulakan tatasusunan nilai dengan nilai kosong, mengambil kesempatan daripada peraturan C bahawa pemula yang tidak disediakan menghasilkan pemulaan nilai kepada sifar. Oleh itu, dua coretan kod berikut adalah bersamaan:
int values[5] = {0, 0, 0, 0, 0}; int values[5] = {};
Dengan memahami nuansa ini, anda boleh mengelakkan ralat tugasan dan berfungsi dengan berkesan dengan tatasusunan dalam C .
Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Menetapkan Satu Tatasusunan kepada Satu Tatasusunan Secara Terus dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!