Heim >Backend-Entwicklung >C++ >Warum kann ich in C ein Array nicht direkt einem anderen zuweisen?
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
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!
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);
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] = {};
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!