Wie erhalten Sie die Größe des Arrays, das an die Funktion übergeben wird?

7

Ich versuche eine Funktion zu schreiben, die die Elemente in einem Array ausgibt. Wenn ich jedoch mit den übergebenen Arrays arbeite, weiß ich nicht, wie ich über das Array iterieren soll.

%Vor%

Was ist der beste Weg, um über das übergebene Array zu iterieren?

    
unj2 06.10.2010, 01:39
quelle

6 Antworten

16

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]

zu zeigen %Vor%

Dieser Trick funktioniert nur mit Arrays, nicht mit Pointern:

%Vor%

... und Arrays sind nicht die gleichen wie Zeiger .

    
Brian R. Bondy 06.10.2010, 01:40
quelle
5

Warum verwenden Sie dafür keine Funktionsvorlagen (C ++)?

%Vor%

EDIT 2:

Das qn scheint nun C-Tag zu haben und das C ++ - Tag wurde entfernt.

    
Chubsdad 06.10.2010 01:48
quelle
2

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.

    
Arun 06.10.2010 02:00
quelle
0

In C99 können Sie verlangen, dass ein Array ein Array mindestens n elements hat:

%Vor%
  

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%     
Matt Joiner 06.10.2010 02:13
quelle
0

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.

    
Tony Delroy 06.10.2010 01:52
quelle
0

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.

    
Roman A. Taycher 06.10.2010 08:51
quelle

Tags und Links