Sie sind auf Seite 1von 8

PPM: Informationstechnik / Programmierkurse www.math.tu-berlin.

de/ppm

Zeiger

Projektgruppe Praktische Mathematik Informationstechnik fr Ingenieure Programmierkurs C

PPM: Informationstechnik / Programmierkurse www.math.tu-berlin.de/ppm

Variablen
Eine Variable zeichnet sich aus durch:
Typ, Name, Speicheradresse und Wert

Beispiel 1
Typ: Socken Name: Wert: Adresse Schublade 1 2 c2

1 a b c d 1

3 a b c d

Beispiel 2
#include<stdio.h> int main(void) { int a; a = 5;

printf("Typ der Variablen: printf("Name der Variablen: printf("Wert der Variablen: printf("Speicheradresse der Variablen: return 0; } -> -> -> -> Typ der Variablen: Name der Variablen: Wert der Variablen: Speicheradresse der Variablen:

Integer \n"); a \n"); %d \n",a); %p \n",&a);

Integer a 5 0xbffff978
2

PPM: Informationstechnik / Programmierkurse www.math.tu-berlin.de/ppm

Zeiger
In C gibt es einen Datentyp Zeiger. Ein Zeiger ist eine Variable, die auf eine Speicheradresse zeigt. => Der Wert eines Zeigers ist eine Adresse. Ein Zeiger hat stets den selben Typ wie die Variable, auf die er zeigen soll. Ein Zeiger wird deklariert mit int *zeiger; Fr die Arbeit mit Zeigern sind zwei Operatoren wichtig: => & Adressoperator => * Referenzierungsoperator (Inhaltsoperator)

Zusammenfassung
Ein Zeiger ist eine Variable, die als Wert die Adresse einer anderen Variablen enthlt. Mit Hilfe von Zeigern kann man indirekt auf eine Variable zugreifen. => Wichtig bei Funktionen (call by reference)

PPM: Informationstechnik / Programmierkurse www.math.tu-berlin.de/ppm

Adressoperator
Der Adressoperator gibt die Speicheradresse einer Variablen an. Die Funktion scanf bentigt z.B. eine Adresse, an der sie eine Eingabe speichern kann.

Beispiel
#include<stdio.h> int main(void) { int a; scanf("%d",&a); printf("Wert von a: %d\n",a); printf("Speicheradresse von a: %p\n",&a); return 0; } -> 25 -> Wert von a: 25 -> Speicheradresse von a: 0xbffff978

Anmerkung:
Der Platzhalter %p gibt den Parameter als Zeiger in hexadezimaler Form aus.

PPM: Informationstechnik / Programmierkurse www.math.tu-berlin.de/ppm

Referenzierungsoperator
Der Referenzierungsoperator (Inhaltsoperator) gibt den Wert / Inhalt einer referenzierten Variablen an.

Beispiel
Der Variablen zahl wird der Wert 25 zugewiesen. Dem Zeiger zeiger wird die Speicheradresse der Variablen zahl zugewiesen. Durch die Anwendung des Referenzierungsoperators auf den Zeiger zeiger erhalten wir den Wert der Variablen zahl, auf die der Zeiger zeigt, also den Wert 25.
#include<stdio.h> int main(void) { int zahl; int *zeiger; zahl = 25; zeiger = &zahl; printf("Wert von zahl: printf("Adresse von zahl: printf("Wert von zeiger: printf("Adresse von zeiger: printf("Referenzierter Wert von zeiger: return 0; } -> -> -> -> -> Wert von zahl: Adresse von zahl: Wert von zeiger: Adresse von zeiger: Referenzierter Wert von zeiger: 25 0xbffff978 0xbffff978 0xbffff974 25
5

%d %p %p %p %d

\n",zahl); \n",&zahl); \n",zeiger); \n",&zeiger); \n",*zeiger);

PPM: Informationstechnik / Programmierkurse www.math.tu-berlin.de/ppm

PPM: Informationstechnik / Programmierkurse www.math.tu-berlin.de/ppm

Funktionen call by value


Der Funktion werden als Parameter nur die Werte der Variablen (als Kopie) bergeben. Die Werte der bergebenen Variablen knnen nur innerhalb der Funktion gendert werden. Die Werte der Variablen im aufrufenden Programm ndern sich nicht.

Beispiel
#include<stdio.h> // Deklaration der Funktion mult ---------------------------double mult(double faktor1, double faktor2); // Hauptprogramm -------------------------------------------int main(void) { double a,b,c; a = 3; b = 5; c = mult(a,b); printf("%1.0f x %1.0f = %1.0f\n",a,b,c); return 0; } // Definition der Funktion mult ----------------------------double mult(double faktor1, double faktor2) { double ergebnis; ergebnis = faktor1 * faktor2; return ergebnis; } -> 3 x 5 = 15
7

PPM: Informationstechnik / Programmierkurse www.math.tu-berlin.de/ppm

Funktionen call by reference


Der Funktion werden als Parameter die Adressen der Variablen bergeben. Die Werte der bergebenen Variablen knnen in der Funktion gendert werden. Die nderungen sind im aufrufenden Programm auch gltig.

Beispiel
#include<stdio.h> // Deklaration der Funktion mult ---------------------------int mult(double faktor1, double faktor2, double *ergebnis); // Hauptprogramm -------------------------------------------int main(void) { double a,b,c; a = 3; b = 5; mult(a,b,&c); printf("%1.0f x %1.0f = %1.0f\n",a,b,c); return 0; } // Definition der Funktion mult ----------------------------int mult(double faktor1, double faktor2, double *ergebnis) { *ergebnis = faktor1 * faktor2; return 0; } -> 3 x 5 = 15
8