C Verständnisfrage

  • C Verständnisfrage

    ich bin heute über das Konstrukt

    ++*i;

    gestoßen mit int *i=(int *) malloc(sizeof(int));

    interessanterweise inkrementiert das ++ nicht *i also den Inhalt von i sondern i

    wie ich daraufkomme?

    ++ und * sind beide auf der gleichen Ebene der precedence of operators Liste

    Auf dieser Ebene wird von rechts nach links assoziiert.

    Also müßte *i erst asoziiert werden und dann erst ++

    Das hieße es würde mit ++ der Inhalt *i inkrementiert werden?

    Es wird jedoch i und nicht der Inhalt von i inkrementiert.
  • Ich hab's zur Sicherheit trotzdem gerade noch mal mit einem Testprogramm nachvollzogen.

    Also, in ++*i; wird wirklich *i und nicht etwa i inkrementiert. Ein C Compiler, der das anders macht, ist kaputt:

    C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main(int argc, char *argv[])
    4. {
    5. int *ptr=(int *)malloc(2*sizeof(int));
    6. ptr[0]=4567;
    7. ptr[1]=1234;
    8. printf("%p\n", ptr);
    9. printf("%d\n", ptr[0]);
    10. ++*ptr;
    11. printf("%p\n", ptr);
    12. printf("%d\n", ptr[0]);
    13. exit(EXIT_SUCCESS);
    14. }
    Alles anzeigen
    Bei der zweiten printf()-Gruppe steht ptr immer noch auf dem gleichen Wert und ptr[0] wurde um 1 erhöht.