Zeigerarithmetik



  • Hallo,

    Ich muss einen Zeiger um eine gewisse Anzahl an Bytes erhöhen, die kein ganzzahliges Vielfaches von der Größe des Types ist, worauf der Zeiger zeigt.
    Was ist der einfachste Weg um dies zu tun?

    Vielen Dank!
    (Dies steht im Zusammenhang mit meiner vorhergehenden Frage)



  • Erst in charpnt. casten, dann inkremtieren, dann wieder zurück in Ausgangstyp casten.

    int *p;
    int d=0xff;
    p = &d;
    char *c = (char*)&d;
    c++;
    p = (int*)c;
    


  • bekommt man da keine Probleme wenn man nicht auf des Byte Alignment achtet?



  • Schon, aber man kann wohl davon ausgehen, dass der OP das auf einer Maschine probieren will, wo es keine Probleme dabei gibt. Sonst wird er sich schon wieder melden 🤡



  • sqrt(-1) schrieb:

    Ich muss einen Zeiger um eine gewisse Anzahl an Bytes erhöhen, die kein ganzzahliges Vielfaches von der Größe des Types ist, worauf der Zeiger zeigt.
    Was ist der einfachste Weg um dies zu tun?

    Wenn du dir ganz sicher bist, daß du das wirklich brauchst, dann versuchs mal so (ungetestet):

    int* pi1 = new int[10];
    ...
    pi1 = reinterpret_cast <int*> (reinterpret_cast <char*> (pi1) + 1);
    

    Eine andere Möglichkeit wäre noch:

    int* pi1 = new int[10];
    ...
    asm inc pil;
    

    Moritz

    // edit: Mist, zu spät 😉



  • SeppSchrot schrieb:

    Erst in charpnt. casten, dann inkremtieren, dann wieder zurück in Ausgangstyp casten.

    int *p;
    int d=0xff;
    p = &d;
    char *c = (char*)&d;
    c++;
    p = (int*)c;
    

    Wenn man schon so etwas macht dann bitte
    mit reinterpret_cast<> und nicht mit den C-Style casts.
    Danke.



  • eViLiSSiMo schrieb:

    SeppSchrot schrieb:

    Erst in charpnt. casten, dann inkremtieren, dann wieder zurück in Ausgangstyp casten.

    int *p;
    int d=0xff;
    p = &d;
    char *c = (char*)&d;
    c++;
    p = (int*)c;
    

    Wenn man schon so etwas macht dann bitte
    mit reinterpret_cast<> und nicht mit den C-Style casts.
    Danke.

    Wow. Das bringts.



  • Bashar schrieb:

    Schon, aber man kann wohl davon ausgehen, dass der OP das auf einer Maschine probieren will, wo es keine Probleme dabei gibt. Sonst wird er sich schon wieder melden 🤡

    Wenn er sich dann noch Verbinden kann 😉



  • Danke!

    Ich dachte auch an eine wechselnde Typkonvertierung.
    Nur schade das es keinen schöneren Weg gibt.

    Vertexwahn:
    Was meinst du mit Byte Alignment?
    In welcher Reihenfolge die Bits angelegt sind?



  • da kam noch was... 🙂



  • eViLiSSiMo schrieb:

    Wenn man schon so etwas macht dann bitte
    mit reinterpret_cast<> und nicht mit den C-Style casts.
    Danke.

    Darauf kommt es dann auch nicht mehr an...


Anmelden zum Antworten