In C und C können Funktionssignaturen Array-Längen in eckigen Klammern enthalten, wie zum Beispiel int a[ 1]. Dieses Verhalten hat die Entwickler jedoch verwirrt, da die Längen scheinbar keine praktische Auswirkung haben.
Betrachten Sie das folgende Beispiel:
#include <iostream> int dis(char a[1]) { int length = strlen(a); char c = a[2]; return length; } int main() { char b[4] = "abc"; int c = dis(b); cout << c; return 0; }
In diesem Code deklariert die Funktion dis einen Array-Parameter mit eine Länge von 1 (a[1]), aber der Zugriff auf a[2] ist weiterhin möglich. Dies wirft die Frage auf: Warum erlauben Compiler Array-Längen in Funktionssignaturen, wenn sie nicht erzwungen werden?
Die Antwort liegt im einzigartigen Verhalten der Array-Übergabe in C/ C . Im Gegensatz zu vielen anderen Sprachen erlauben C und C keine direkte Übergabe von Arrays an Funktionen. Stattdessen wird ein Zeiger auf das erste Element des Arrays übergeben.
Dadurch wird die in der Funktionssignatur angegebene Array-Länge irrelevant. Die Längeninformationen sind nicht im Zeiger enthalten, daher ignoriert der Compiler einfach die Länge in den Klammern.
Dieses Verhalten ist auf eine Entscheidung zurückzuführen, die in den frühen Stadien der C-Entwicklung in den 1970er Jahren getroffen wurde. Obwohl es im Laufe der Jahre zu Verwirrung geführt hat, ist die Syntax sowohl in C als auch in C nach wie vor weit verbreitet.
Diese Eigenart der Array-Übergabe hat mehrere Auswirkungen:
Das obige ist der detaillierte Inhalt vonWarum werden Array-Längen in C/C-Funktionssignaturen vom Compiler ignoriert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!