Dilema Tugasan Tatasusunan dalam C
Dalam C , memberikan tatasusunan kepada tatasusunan lain secara langsung tidak boleh dilaksanakan dan mesej ralat "Ralat C2106 : '=' : operan kiri mestilah nilai-l" ditemui. Isu ini berpunca daripada gelagat pelik tatasusunan dalam C kerana keserasiannya dengan C.
Memahami Tingkah Laku
Tatasusunan dalam C tidak boleh diserahkan kerana warisan daripada Pelaksanaan tatasusunan C. Tatasusunan diwakili sebagai rujukan mereput kepada elemen pertamanya, menjadikannya nilai l yang tidak boleh diubah suai. Dalam erti kata lain, tatasusunan tidak boleh diberikan kepada objek lain seperti pembolehubah biasa.
Penyelesaian
Untuk bekerja dengan fungsi seperti tatasusunan dalam C , bekas alternatif daripada Templat Standard Pustaka (STL) disyorkan, seperti std::array atau std::vector. Bekas STL ini membenarkan tingkah laku seperti tatasusunan sambil menyediakan keupayaan tugasan.
Contoh dengan std::array
#include <array> int main() { std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; }
Fallback dengan Tatasusunan
Jika menggunakan bekas STL bukan pilihan, salin elemen tatasusunan secara manual menggunakan gelung atau fungsi seperti std::copy diperlukan.
Contoh dengan Array Copying
#include <algorithm> int main() { int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values); }
Nota Tambahan
Nilai tatasusunan boleh dimulakan dengan senarai pemula kosong, seperti yang ditunjukkan di bawah, bergantung pada peraturan pemulaan nilai yang ditetapkan standard untuk agregat, yang memulakan elemen yang tidak ditentukan kepada sifar.
int values[5] = {};
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menetapkan Tatasusunan Secara Terus dalam C , dan Apakah Alternatifnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!