Zeiger
lima-city → Forum → Programmiersprachen → C/C++ und D
adresse
array
bit
code
compiler
einziges byte
element
ergebnis
feld
first
folgende ausgaben
folgenden code
meckern
operator
pointer
system
typ
zahl
zeiger
zuweisung
- 
    
    Hi, ich hab hier folgenden Code
 
 int a[2], *first; a[0]=1; a[1]=2; first = &a; printf("%i,%i",*(first+1)); ergebnis = 2
 
 int a[2], *first; a[0]=1; a[1]=2; first = a; printf("%i,%i",*(first+1)); ergebnis = 2
 
 Warum wird in beiden Fällen die 2 Ausgegeben?
 Im ersten Fall zeigt der Pointer auf die Adresse, wo das Array liegt.
 Im Zweiten Fall hätte ich jetzt gedacht, dass das erste Element des Arrays also die 2 dem Pointer zugewiesen wird.
- 
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden! lima-city: Gratis werbefreier Webspace für deine eigene Homepage 
- 
    
    Also die Variable a ist ja ein Array und das wird intern als Pointer gespeichert. a enthält also die Adresse, an der das Array beginnt. Im ersten Codeschnipsel weist du "first" also mit dem '&'-Operator einen Zeiger auf ein Array zu. Wahrscheinlich hat dein Compiler diesen Zeiger zu einem int-Array implizit zu einem Zeiger zu einem int umgewandelt, weil aber der Zeiger auf das Array den gleichen Wert erhält wie das Array an sich, kann *(first+1) problemlos ausgewertet werden und zwar eben zu dem zweiten Wert im Array: 2
 Im zweiten Codeschnipsel weist du dem Zeiger first die Adresse vom Array zu und somit zeigt auch first auf den Arrayanfang und deshalb wird *(first+1) genauso zu 2 ausgewertet.
- 
    
    also, das zweite quellcode-stück ist richtig. im ersten ist ein fehler drin. da müsste der compiler eigentlich meckern. bei
 mir tut er es. Da passt der typ nämlich nicht!
 -first ist vom typ int *
 -&a ist vom typ int **, da a vom typ int * ist, und &a, die adresse von a ist. also quasi einen zeiger auf einen zeiger :-)
 
 Arrays sind in C/C++ nichts anderes als Zeiger!
 
 a: Speicheradresse in der das Element 0 des Feldes gespeichert wird.
 a+1: Speicheradresse in der das Element 1 des Feldes gespeicher wird.
 
 Die Zuweisung 'first = a;' ist demnach richtig.
 
 *a: Wert des Elementes 0 des Feldes.
 *(a+1): Wert des Elementes 1 des Feldes.
 
 Kannst ja folgende Ausgaben machen. Dann wird es dir klarer (denke ich^^) :
 
 printf("\n%i\n%i\n", a, a+1); printf("\n%i\n%i\n", &a[0], &a[1]);
 
 In beiden Fällen werden die Adressen der beiden Feldelemente ausgegeben. Da der Typ Integer
 auf einem 32-Bit system den Speicherplatz von 4 Bytes einnimmt und da jede Speicheradresse immer
 jeweils 1 einziges Byte adressiert, werden die Adressen der Feldelemente um die Zahl 4 auseinander liegen.
 
 
 
 
 
 
 
 
 
 
- 
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden! lima-city: Gratis werbefreier Webspace für deine eigene Homepage 

