Frage zu Pointer-Arithmetik



  • Ich sage mal mit den Operatorprioritäten ist das soweit klar, aber wie kann der Pointer auf eine Adresse zeigen (bei den folgenden), welche aber nicht den Buchstaben zugeordnet ist? Normalweise speicher doch der Pointer die Adresse der Variable, auf welche er zeigt. Und mit * greift er auf den Inhalt der Variable zu.
    Wie geht es dann, dass Adresse auf etwas anderes zeigt, als der Inhalt?



  • printf("\n3. ++zeiger:\t 0x%X ", ++zeiger); getch();
    printf("\n4. *++zeiger:\t %c ", *++zeiger); getch()

    du incrementierst den zeiger 2x wenn du ++zeiger machst, musst du ihn nicht mehr beim inhalt aufrufen inkrementieren.



  • Diese Zeilen sind mir soweit klar.

    Für das ganze habe ich mir mal eine Tabelle aufgestelt:

    Var. Adresse
    a --> ...30
    b --> ...31
    c --> ...32
    d --> ...33
    e --> ...34
    f --> ...35
    g --> ...36
    ...

    Bis zu 6 passt die Zuordnung Pointer zeigt auf Adresse und liesst Inhalt (nach der Tabelle).
    Aber ab 7 und folgend zeigt der Pointer auf die Adresse ...35 und Inhalt e?
    Das verstehe ich nicht. Oder kann man das nicht so zuordnen?



  • versuch doch mal

    char *txt = "abcdefghij";
    
    statt
    
    char txt[] = "abcdefghij";
    

    dann sollte sich dein problem relativ schnell lösen lassen, denn du veränderst nicht den zeiger sondern den speicherbereich auf den dein zeiger zeigt

    "--(*zeiger)" bewirkt das in txt[5] statt 'f' 'e' steht denke das bringt dir dann auch die folge fehler 😕

    lg lolo



  • OK. Aber warum ist das dann so bei der jetzigen Deklaration? Muss sich ja auch erklären lassen 😃



  • OK. Aber warum ist das dann so bei der jetzigen Deklaration? Muss sich ja auch erklären lassen

    also das check ich nicht 😕

    meinst du wieso sich der speicher ändert?

    //dein zeiger -- und dann ab zur speicher stelle
    *--asd
    
    vs
    
    //du gehts dahin wo dein zeiger hin zeigt und dann --
    --*asd == --(*asd)
    

    oder auf was willst du hinaus?



  • Der Zeiger ist ja auf ein Array gerichtet. Und der zeiger kann ja nur das wiedergeben, wo die Adresse darauf zeigt. Und da habe ich diese Tabelle aufgestellt zu welchem Buchstaben, welche Adresse gehört.
    Und ab 9 ist die Adresse wo der Zeiger hinzeigt verschieden von dem dazugehörigen Buchstaben aus dem Array. Und das verstehe ich nicht?
    Wenn der Poiter im Array eine Position weiterrückt, dann ändert sich doch der Buchstabe und die Adresse +1, so wie es bis 6 ist.



  • Seppe123 schrieb:

    ...
    printf("\n6. *zeiger++:\t %c %X ", *zeiger++,zeiger); getch();
    printf("\n7. *(zeiger++):\t %c %X ", *zeiger++, zeiger); getch();
    printf("\n8. --(*zeiger):\t %X %c ",zeiger, --(*zeiger)); getch();
    printf("\n9. *zeiger:\t %X %c ", zeiger, *zeiger); getch();
    printf("\n10. *(zeiger-3): %X %c ",zeiger, *(zeiger-3)); getch();
    printf("\n11. *zeiger): %X %c ",zeiger, *zeiger); getch();
    printf("\n12. ++zeiger: %X %c ",++zeiger, *zeiger); getch();
    printf("\n13. *++zeiger: %X %c ",zeiger, *++zeiger); getch();
    printf("\n14. *++zeiger: %X %c ",zeiger, *++zeiger); getch();
    ...

    ^^ die ausgaben könnten dich verwirren. 'printf' muss seine argumente nicht zwingend von links nach rechts durchnudeln. probier mal folgendes:

    int a = 0;
      printf ("%d %d %d\n", a++, a++, a++);
    

    gibt bei mir 2 1 0 aus. erwarten würde man wohl: 0 1 2
    🙂



  • --*asd
    

    verändert dein array da kannst deine zeiger so oft rum schieben wie du willst.

    --*asd
    

    rechnet nicht temorär den zeiger -1 sondern rechnet 'f'-1 was dann 'e' ergibt und das steht dann in deinem array? kpl. wie man das erklären soll, besorg dir nen debugger und schau es dir an :p



  • Stimmt 😮 Und warum ist das so mit printf?

    Debugger ist eine gute Idee 🙂




Anmelden zum Antworten