Sie müssen auch die Größe des Arrays an die Funktion übergeben.
Wenn Sie das Array an Ihre Funktion übergeben, übergeben Sie in Wirklichkeit die Adresse des ersten Elements in diesem Array. Der Zeiger zeigt also nur innerhalb der Funktion auf das erste Element.
Da der Speicher im Array jedoch stetig ist, können Sie weiterhin die Zeigerarithmetik wie (b+1)
verwenden, um auf das zweite Element oder äquivalent b[1]
Dieser Trick funktioniert nur mit Arrays, nicht mit Pointern:
%Vor%Für C müssen Sie die Länge (Anzahl der Elemente) des Arrays übergeben.
Für C ++ können Sie die Länge übergeben, ABER, wenn Sie Zugriff auf C ++ 0x haben, ist BETTER die Verwendung von std::array
. Siehe hier und hier . Er trägt die Länge und bietet eine Überprüfung auf Out-of-Bound, wenn Sie mit der% member-Funktion at()
auf Elemente zugreifen.
In C99 können Sie verlangen, dass ein Array ein Array mindestens n
elements hat:
6.7.5.3.7 : Eine Deklaration eines Parameters als '' array of type '' soll auf '' quali fi zierter Zeiger auf '' eingestellt werden Geben Sie '' ein, wenn die Typqualifizierer (sofern vorhanden) die in [und] der Array-Typ-Ableitung. Wenn das Schlüsselwort static auch innerhalb des [und] des Array-Typ Ableitung, dann für jeden Aufruf der Funktion der Wert des entsprechenden Das tatsächliche Argument muss den Zugriff auf das erste Element eines Arrays mit mindestens so vielen Elementen ermöglichen Elemente wie durch den Größenausdruck angegeben.
In GCC können Sie die Größe eines Arrays implizit so übergeben :
%Vor%Du könntest das versuchen ...
%Vor%... interessanterweise funktioniert b nicht ...
%Vor%JoshD weist in den Kommentaren unterhalb des Problems auf Arrays mit einer Größe von 0 (eine GCC-Erweiterung) und die Größenrückschlüsse oben hin.
In C ++ können Sie auch eine Art von List-Klasse verwenden, die als Array mit einer Size-Methode oder als Struktur mit einem Size-Member (in c oder c ++) implementiert ist.