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; 
 Da Zeichenketten ein Spezialfall von Arrays sind, gelten diese Regeln dort ebenfalls.*IntZeiger = 5; 
 |  | 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