Array als Argument an eine Funktion ubergeben

sallas19

Grünschnabel
Hallo, ich bin Anfänger in C und hab in der Uni folgendes Programm:
1. ich verstehe die Zeile 5 nicht. Warum wird der Pointer und der Datentyp so deklariert?
2. wofür ist der Pointer hier gut?
3. ab Zeile 18 bis 24 versteh ich gar nichts mehr.

ich wäre euch sehr sehr dankbar, wenn mir ihr mir hier weiterhelfen könnt.

C++:
1 /* array_arg.c */
2 #include
3 #define MAX 10
4
5 int maximum(int *, int);
6
7 int main() {
8     int i;
9     int array[MAX];
10
11    for (i = 0; i < MAX; i++) {
12        printf("Eingabewert: \n");
13        scanf("%d", &array[I]);
14    }                                                     /* array ist Pointer auf array[0] */
15    printf("Maximum: \t%d\n", maximum(array, MAX));
16 }
17
18 int maximum(int x[], int y) {              /* int *x waere moeglch; aber unverbindlicher */
19 int i, max = x[0];
20
21     for (i = 0; i < y; i++)
22        if (x[I] > max) max = x[I];
23[
24     return max;
25 }/code]
 
Zuletzt bearbeitet von einem Moderator:
1) Zeile 5 ist eine Vorwärts Deklaration. Einem Funktionskopf ist es egal wie die Variablen heissen. Der interessiert sich nur für den Datentyp. Ist in C eine gültige Schreibweise.
2) Steht in Zeile 14
3) finde den höchsten Wert, den der User eingegeben hat
 
Zum Verständnis:
In C muss alles, was in einem Programm "benutzt" werden soll, VORHER dem Programm "bekannt" sein.
Das ist wie bei Variablen: Du musst sie deklarieren, BEVOR sie verwendet wird. Dasselbe gilt für Funktionen.
In deinem Beispiel ist die Funktion "maximum" nämlich NACH "main" implementiert.
Ohne Zeile 5 würde "main" gar nicht wissen, was "maximum" ist, welches es in Zeile 15 verwenden möchte.

Und bei Vorwärtsdeklarationen kannst du eben diese "verkürzte" Form der Deklaration nutzen.
Auf Deutsch würde Zeile 5 wie folgt lauten:
"Hallo Programm, ich informiere dich jetzt schon hier am Anfang, dass irgendwo später eine Funktion auftauchen wird, welche wie folgt deklariert ist:
Rückgabewert = Int-Wert
Funktionsname = maximum
Erstes Argument = Zeiger auf Int-Wert
Zweites Argument = Int-Wert"

Was hier "verwirrend" erscheinen mag ist, das in Zeile 5 eine explizite Zeiger-Notation verwendet wird, in Zeile 18 aber eine explizite Array-Notation.
Dazu muss man wissen, dass eine Array-Variable selbst ein Zeiger auf das erste Element des Arrays ist

In einem übertragenen Sinne gilt nämlich (versinnbildlicht)
C:
//Die Variable "Array" enthält die Adresse des ersten Elements
array = &array[0]
und array[0] IST ein Int-Wert, also ist array bzw. &array[0] die Adresse des ersten Elements, also ein Zeiger auf einen Int-Wert
 
Zuletzt bearbeitet:
Zurück