Heim > Backend-Entwicklung > C++ > Warum kann ich in C ein Array nicht direkt einem anderen zuweisen?

Warum kann ich in C ein Array nicht direkt einem anderen zuweisen?

Susan Sarandon
Freigeben: 2024-12-03 02:57:09
Original
958 Leute haben es durchsucht

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

Arrays in C: Zuweisungsbeschränkungen verstehen

Arrays in C weisen ein eigenartiges Verhalten auf, darunter ihre eingeschränkte Zuweisbarkeit. Lassen Sie uns untersuchen, warum die Zuweisung eines Arrays zu einem anderen verboten ist, wie der folgende Code zeigt:

int numbers[5] = {1, 2, 3};
int values[5] = {0, 0, 0, 0, 0};
values = numbers;  // Error: C2106
Nach dem Login kopieren

Dieser Code generiert den Fehler „Fehler C2106: '=': Linker Operand muss L-Wert sein“ und signalisiert damit ein Versuch, einem nicht änderbaren Objekt eine Zuweisung zuzuweisen.

Der Fehler tritt auf, weil Arrays in C in erster Linie als nicht änderbar oder nicht zuweisbar gelten aufgrund der Abwärtskompatibilität mit C. Das Zuweisen eines Arrays zu einem anderen würde das Kopieren aller seiner Elemente erfordern, was äußerst ineffizient und fehleranfällig ist.

Stattdessen empfiehlt C die Verwendung von Containern aus der Standard Template Library (STL). , wie std::array oder std::vector, die effiziente und typsichere Array-ähnliche Funktionen bieten. Verwenden Sie beispielsweise std::array, um die gewünschte Funktionalität zu erreichen:

#include <array>

std::array<int, 5> numbers = {1, 2, 3};
std::array<int, 5> values = {};
values = numbers;  // No error!
Nach dem Login kopieren

Bei primitiven Arrays (wie dem im Originalcode) können Sie Elemente mithilfe einer Schleife manuell kopieren oder nutzen std::copy function:

#include <algorithm>

int numbers[5] = {1, 2, 3};
int values[5] = {};
std::copy(numbers, numbers + 5, values);
Nach dem Login kopieren

Darüber hinaus demonstriert der bereitgestellte Code eine Verknüpfung zum Initialisieren des Wertearrays mit leeren Werten und nutzt dabei eine C-Regel, die Initialisierer nicht bereitstellt führt zu einer Wertinitialisierung auf Null. Daher sind die folgenden beiden Codeausschnitte gleichwertig:

int values[5] = {0, 0, 0, 0, 0};
int values[5] = {};
Nach dem Login kopieren

Durch das Verständnis dieser Nuancen können Sie Zuweisungsfehler vermeiden und effektiv mit Arrays in C arbeiten.

Das obige ist der detaillierte Inhalt vonWarum kann ich in C ein Array nicht direkt einem anderen zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage