Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Menetapkan Tatasusunan Secara Terus dalam C , dan Apakah Alternatifnya?

Mengapa Saya Tidak Boleh Menetapkan Tatasusunan Secara Terus dalam C , dan Apakah Alternatifnya?

Barbara Streisand
Lepaskan: 2024-12-01 18:16:12
asal
230 orang telah melayarinya

Why Can't I Directly Assign Arrays in C  , and What Are the Alternatives?

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;
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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] = {};
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan