Cheatography
https://cheatography.com
Übersicht über Zeiger / Pointer in C
KurzübersichtDeklaration und Definition | int *zeiger; Deklaration eines Zeigers zeiger auf einen int | Speicheradresse einer Variable in Zeiger speichern | int i; int *ip; ip = &i;
| Auf den Wert (nicht die Speicheradresse) eines Zeigers zugreifen | int i; int *ip; ip = *i;
| 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 OperatorenOperator | 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 ArraysArray | 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 RegelnZeiger 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 Beispieleint 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 ZeigerDefinition | 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
|
|
Help Us Go Positive!
We offset our carbon usage with Ecologi. Click the link below to help us!
Created By
Metadata
Comments
No comments yet. Add yours below!
Add a Comment
Related Cheat Sheets
More Cheat Sheets by TimSch