Rumah >pembangunan bahagian belakang >C++ >Mengapakah Saya Tidak Boleh Menetapkan Satu Tatasusunan kepada Satu Tatasusunan Secara Terus dalam C?

Mengapakah Saya Tidak Boleh Menetapkan Satu Tatasusunan kepada Satu Tatasusunan Secara Terus dalam C?

Susan Sarandon
Susan Sarandonasal
2024-12-03 02:57:09952semak imbas

Why Can't I Directly Assign One Array to Another in C  ?

Array dalam C : Memahami Sekatan Kebolehtugasan

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!

Kenyataan:
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