Cheatography
https://cheatography.com
Übersicht über Zeiger / Pointer in C
Kurzübersicht
Deklaration und Definition |
int *zeiger; Deklaration eines Zeigers zeiger auf einen int |
Speicheradresse einer Variable in Zeiger speichern |
|
Auf den Wert (nicht die Speicheradresse) eines Zeigers zugreifen |
|
Zeigerwert NULL |
In stdio.h definiert. Wird genutzt, um zu vermeiden, dass ein Zeiger irgendwohin zeigt. NULL ist ein Zeiger! |
unveränderbare Zeiger |
Werden wie Variablen mit dem Schlüsselwort const
definiert. |
Zeiger auf Zeiger |
Zeiger können auch auf andere Zeiger zeigen. int Wert = 1234; int *p1 = &Wert; int **p2 = &p1;
|
Einen Zeiger auf einen Zeiger erstellt man mit dem doppelten Variablenoperator **
Zeiger Operatoren
Operator |
Funktion |
& |
Adressoperator Greift auf die Speicheradresse der Variablen, auf die der Zeiger zeigt zu. |
* |
Variablenoperator Greift auf den Wert der Variablen, auf die der Zeiger zeigt, zu. |
Zeiger und Arrays
Array |
Zeiger |
Adresse |
Inhalt |
IntArray[0] |
*IntZeiger |
00004711h |
5 |
IntArray[1] |
*(IntZeiger + 1) |
00004715h |
4 |
int *IntZeiger = NULL;
int IntArray[5];
IntZeiger = IntArray;
IntArray[0] = 5;
IntArray[1] = 4;
*IntZeiger = 5;
Da Zeichenketten ein Spezialfall von Arrays sind, gelten diese Regeln dort ebenfalls.
|
|
Zeiger-Arithmetik Regeln
Zeiger können mit ganzen Zahlen addiert und Subtrahiert werden. |
Zwei Zeiger gleichen Typs lassen sich subtrahieren. ip1 = 1 - ip2
wäre verboten, da 1 vom Typ int
und ip2 vom Typ int *
ist. |
Alle anderen Operationen, wie Multiplikation oder Division usw. sind nicht erlaubt. |
Es wird nicht in Bytes, sondern in Anzahl von Elementen des Datentyps, auf den der Zeiger zeigt, gerechnet. Wird 1 zu einem Zeiger auf int addiert, zeigt er nicht auf die nächste Speicheradresse, sondern auf den nächsten int. |
Zeiger-Arithmetik Beispiele
int i1 = 5, i2 = 7; int ip1 = &1, ip2 = &i2;
|
Operation |
erlaubt? |
ip2 = ip1 + 1; |
ja - Zeiger und ganze Zahl |
ip1 = ip2 - 1; |
ja - Zeiger und ganze Zahl |
ip2 = 1 + ip1; |
ja - Zeiger und ganze Zahl |
ip1 = 1 - ip2; |
nein - es können nur Zeiger gleichen Typs subtrahiert werden |
i1 = ip1 + ip2; |
nein - keine ganze Zahl, sondern zwei Zeiger |
i2 = ip2 - ip1; |
ja - zwei Zeiger vom gleichen Typ |
Übersicht unveränderbare Zeiger
Definition |
int i1 = 5 int const i2 = 3; int* ip1 = &i1; //veränderbarer Zeiger auf veränderbare Variable int const * ip2 = &i2; //veränderbarer Zeiger auf unveränderbare Variable int* const ip3 = &i1; //unveränderbarer Zeiger auf veränderbare Variable int const * const ip4 = &i2; *(ip1++); //erlaubt (*ip1)++ //erlaubt *(ip2++); //erlaubt (*ip2)++; //Fehler - unveränderbare Variable! *(ip3++); //Fehler - unveränderbarer Zeiger! (*ip3)++ //erlaubt *(ip4++); //Fehler - unveränderbarer Zeiger (*ip4)++; //Fehler - unveränderbare Variable
|
|
Created By
Metadata
Comments
No comments yet. Add yours below!
Add a Comment
Related Cheat Sheets
More Cheat Sheets by TimSch