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;//< ;/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;
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 }
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!