Heim > Backend-Entwicklung > C++ > Warum kann ich Arrays nicht direkt zuweisen, wohl aber innerhalb von Strukturen in C/C?

Warum kann ich Arrays nicht direkt zuweisen, wohl aber innerhalb von Strukturen in C/C?

Susan Sarandon
Freigeben: 2024-12-19 22:49:09
Original
499 Leute haben es durchsucht

Why Can't I Assign Arrays Directly, But I Can Within Structs in C/C  ?

Warum die Zuweisung nach Array-Mitgliedern nur innerhalb von Strukturen unterstützt wird

Im Gegensatz zu Arrays im Allgemeinen genießen in Strukturen definierte Arrays die Zuweisung nach Mitgliedern. Während die Zuweisung eines Arrays zu einem anderen nicht zulässig ist (__

num1 = num2;//
), ist es innerhalb von Strukturen möglich (
struct1 = struct2;//&lt ;/pre>__), wie unten gezeigt:</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"

struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Nach dem Login kopieren

Historisch und philosophisch Begründung

Diese Ungleichheit ist auf die Entwicklung von C zurückzuführen. In frühen Iterationen waren Arrays im Wesentlichen Zeiger ohne Größeninformationen. Dies erschwerte ihre Zuordnung, da dem Compiler die notwendigen Daten fehlten. Dennoch profitierten Arrays innerhalb von Strukturen von einer Sonderbehandlung, da sie ihre Typ- und Größeninformationen von der umschließenden Struktur erbten. Dadurch konnten sie im Kontext der Struktur mitgliedweise zugewiesen werden, ohne von den allgemeinen Einschränkungen betroffen zu sein.

Diese Praxis wurde auf modernes C und C übertragen, eine Eigenart, die die Implementierungsherausforderungen der Zuweisung offener Arrays löst. Die Einführung einer allgemeinen Array-Zuweisung hätte zu Unklarheiten und Kompatibilitätsproblemen geführt. Daher wurde die Einschränkung beibehalten und Programmierern wurde empfohlen, memcpy für das explizite Kopieren von Arrays zu verwenden.

Ausnahmen

Funktionsparameter haben sich als eine weitere Einstellung herausgestellt, in der sich Array-Mitglieder befinden können zugewiesen. Betrachten Sie den folgenden Code:

typedef int vec[3];

void f(vec a, vec b) {
    a = b; // pointer assignment
}
Nach dem Login kopieren

Obwohl a ein Zeigerparameter ist, führt die Zuweisung effektiv eine elementweise Kopie durch, obwohl sie außerhalb einer Struktur liegt. Bei dieser Ausnahme handelt es sich im Wesentlichen um eine Erweiterung, die Wertesemantik in Funktionsaufrufen ermöglicht.

Das obige ist der detaillierte Inhalt vonWarum kann ich Arrays nicht direkt zuweisen, wohl aber innerhalb von Strukturen in C/C?. 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 Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage