Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
c:func:callbyreference [2009/07/05 12:04] syntov |
c:func:callbyreference [2022/11/21 22:34] (aktuell) nufan |
||
|---|---|---|---|
| Zeile 10: | Zeile 10: | ||
| int main () | int main () | ||
| { | { | ||
| - | |||
| int x=5; | int x=5; | ||
| int y=7; | int y=7; | ||
| Zeile 19: | Zeile 18: | ||
| return 0; | return 0; | ||
| - | |||
| } | } | ||
| void swap (int *p1, int *p2) | void swap (int *p1, int *p2) | ||
| { | { | ||
| - | |||
| int help; | int help; | ||
| Zeile 30: | Zeile 27: | ||
| *p1=*p2; | *p1=*p2; | ||
| *p2=help; | *p2=help; | ||
| - | |||
| }</code> | }</code> | ||
| Zeile 49: | Zeile 45: | ||
| ===== Arrays als Parameter ===== | ===== Arrays als Parameter ===== | ||
| In C besteht ein sehr enger Zusammenhang zwischen Arrays und Zeigern. | In C besteht ein sehr enger Zusammenhang zwischen Arrays und Zeigern. | ||
| - | Wie im Kapitel [[c:array|Arrays]] erklärt, ist der Name des Feldes (ohne Indexklammern) nichts anders als ein Zeiger auf das erste Feldelement. Aus diesem Grund ist der Adressoperator bei der Übergabe an die Funktion nicht nötig. | + | Wie im Kapitel [[c:type:array|Arrays]] erklärt, ist der Name des Feldes (ohne Indexklammern) nichts anders als ein Zeiger auf das erste Feldelement. Aus diesem Grund ist der Adressoperator bei der Übergabe an die Funktion nicht nötig. |
| Beispiel: | Beispiel: | ||
| Zeile 58: | Zeile 54: | ||
| int main () | int main () | ||
| { | { | ||
| - | + | int a[]={5, 4, 3, 2, 1}, i; | |
| - | int a[5]={5, 4, 3, 2, 1}, i; | + | |
| sort (a); // kein & !!! | sort (a); // kein & !!! | ||
| Zeile 67: | Zeile 62: | ||
| return 0; | return 0; | ||
| - | |||
| } | } | ||
| void sort (int *p) // oder int p[] | void sort (int *p) // oder int p[] | ||
| { | { | ||
| - | |||
| ... | ... | ||
| - | |||
| }</code> | }</code> | ||
| Zeile 88: | Zeile 80: | ||
| // size_of_array gibt die Länge des Arrays an | // size_of_array gibt die Länge des Arrays an | ||
| { | { | ||
| - | |||
| int i; | int i; | ||
| for (i=0; i<size_of_array; i++, p++) | for (i=0; i<size_of_array; i++, p++) | ||
| printf ("%d\n", *p); | printf ("%d\n", *p); | ||
| - | |||
| }</code> | }</code> | ||
| Zeile 111: | Zeile 101: | ||
| int main () | int main () | ||
| { | { | ||
| - | |||
| char string[]={"Hallo\0"}, ch = 'a'; | char string[]={"Hallo\0"}, ch = 'a'; | ||
| char *first; | char *first; | ||
| Zeile 121: | Zeile 110: | ||
| if (first != NULL) | if (first != NULL) | ||
| printf ("%c\n\n", *first); | printf ("%c\n\n", *first); | ||
| - | + | else | |
| - | else | + | printf ("Zeichen nicht vorhanden\n\n"); |
| - | printf ("Zeichen nicht vorhanden\n\n"); | + | |
| return 0; | return 0; | ||
| - | |||
| } | } | ||
| Zeile 132: | Zeile 119: | ||
| char* first_occurance (char *string, char ch) // Rückgabetyp ist ein Pointer vom Typ char, deshalb char* | char* first_occurance (char *string, char ch) // Rückgabetyp ist ein Pointer vom Typ char, deshalb char* | ||
| { | { | ||
| - | |||
| char *p; | char *p; | ||
| while (*string != '\0') // sucht bis zum Ende des Strings | while (*string != '\0') // sucht bis zum Ende des Strings | ||
| { | { | ||
| - | | ||
| if (*string == ch) // Zeichen gefunden | if (*string == ch) // Zeichen gefunden | ||
| { | { | ||
| - | |||
| p = string; // p zeigt auf das Zeichen und wird zurückgegeben | p = string; // p zeigt auf das Zeichen und wird zurückgegeben | ||
| return p; | return p; | ||
| - | |||
| } | } | ||
| | | ||
| string++; // nächstes Zeichen wird überprüft | string++; // nächstes Zeichen wird überprüft | ||
| - | |||
| } | } | ||
| return 0; // Zeichen nicht gefunden | return 0; // Zeichen nicht gefunden | ||
| - | |||
| }</code> | }</code> | ||