Heim >Backend-Entwicklung >C++ >Warum scheinen Array-Längen in C- und C-Funktionssignaturen ignoriert zu werden?

Warum scheinen Array-Längen in C- und C-Funktionssignaturen ignoriert zu werden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-15 06:07:13756Durchsuche

Why Do Array Lengths in C and C   Function Signatures Seem to Be Ignored?

Array-Längen in Funktionssignaturen: Eine syntaktische Kuriosität

Trotz des offensichtlichen Vorhandenseins von Array-Längen in Funktionssignaturen in C und C sind diese Längen werden faktisch außer Acht gelassen. Dieses Verhalten hat Entwickler verwirrt und wirft Fragen nach seinem Zweck auf.

Die Illusion der Array-Längenkontrolle

Bedenken Sie den folgenden C-Codeausschnitt:

#include <stdio.h>

int dis(char a[1]) {
    return strlen(a);
}

int main() {
    char b[4] = "abc";
    int c = dis(b);
    printf("%d\n", c);
    return 0;
}

In diesem Code erwartet die dis-Funktion ein Array von Zeichen mit einer Länge von 1 ([1]). Der Benutzer übergibt jedoch ein Array mit einer Länge von 4 (b). Überraschenderweise lässt sich der Code kompilieren und ausführen, ohne dass Fehler auftreten. Dies deutet darauf hin, dass die in der Funktionssignatur angegebene Array-Länge nicht erzwungen wird.

Die wahre Natur von Array-Passagen

In C und C werden Arrays nicht als Wert übergeben . Stattdessen wird ein Zeiger auf das erste Element des Arrays übergeben. Daher wird die Angabe einer Array-Länge in einer Funktionssignatur überflüssig, da diese Informationen aus dem Zeiger abgeleitet werden können.

Die historische Begründung

Die Entscheidung, dies zuzulassen Angaben zur Array-Länge in Funktionssignaturen wurden in den frühen Tagen von C gemacht, wahrscheinlich aufgrund der Überlieferungen früherer Sprachen. Obwohl diese Syntax aus Kompatibilitätsgründen beibehalten wurde, ist sie zu einer Quelle der Verwirrung für Entwickler geworden.

Schlussfolgerung

Das Vorhandensein von Array-Längen in C- und C-Funktionssignaturen ist eine syntaktische Eigenart, die Array-Längen nicht wirklich erzwingt. Dieses Verhalten ist auf den zugrunde liegenden Übergabemechanismus zurückzuführen, der Zeiger auf Array-Elemente und nicht auf die Arrays selbst umfasst. Obwohl diese Syntax unnötig erscheinen mag, haben ihre historischen Ursprünge ihren Platz in modernen C- und C-Programmiersprachen gefestigt.

Das obige ist der detaillierte Inhalt vonWarum scheinen Array-Längen in C- und C-Funktionssignaturen ignoriert zu werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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