kostenloser Webspace werbefrei: lima-city


Zeiger

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    animesubs

    Kostenloser Webspace von animesubs

    animesubs hat kostenlosen Webspace.

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. 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.









  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!