Post- und Prefix Notation?



  • für p gibt er mir nun ein 'a' aus und für q ein ' q'.

    Warum mich das jetzt allerdings schockieren soll, weiß ich nicht 😞



  • bandchef schrieb:

    für p gibt er mir nun ein 'a' aus und für q ein ' q'.

    Warum mich das jetzt allerdings schockieren soll, weiß ich nicht 😞

    Das du mit deiner Code schon richtig liegst. Nun musst du nur anstelle der Variable die Adresse ausgeben 😉

    printf("%p %p", p, q);
    


  • Wo hast du die Aufgabe überhaupt her?

    Entweder bist du schizophren oder nicht alleine (aber das bist du im ersten Fall ja auch nicht 😃 ) denn ich hatte gerade ein Déjà-vu von http://www.mikrocontroller.net/topic/205788



  • Der scheint wohl ein Kommilitone zu sein ^^



  • Was ist denn nun mit der Aufgabe?

    Das in diesem Fall ein a und ein q rauskommen weiß ich ja mittlerweile weil ich von 0 aus 6 stellen weiter gehen muss, also quasi von 0 - 6.



  • Du hast doch die Aufgabe schon längst richtig gelöst... oO!?



  • | <- *p
    -------------------------
    | a | s | d | f | g | 0 |
    -------------------------
      0   1   2   3   4   5
    
    -------------------------
    | q | w | e | r | 0 |   |
    -------------------------
      6   7   8   9   10  11
    

    Sorry, aber ich verstehe halt bloß nicht, warum ich von 0 an zu zählen anfangen soll... Wenn ich doch nur 6 stellen weiter gehen soll! Wenn ich 6 Stellen gehen soll muss ich doch eigentlich 1,2,3,4,5,6 zählen, was dann der 0 entsprechen würde, oder?



  • In deinem Array steht doch aber nur:

    | 0   1   2   3   4   5 | 6   7   8   9   10  11
    ------------------------------------------------- 
    | a | s | d | f | g | 0 | q | w | e | r | 0 |   |
    -------------------------------------------------
    |<-p                    |<-q
    

    Und q = p + 6;



  • 0, 1, 2, 3, 4, 5



  • Wenn ich von der 0 anfange zu 6 stellen nach hinten zu zählen, dann lande ich bei der \0. Ich will aber zum 'q'... Wenn ich zähle 0,1,2,3,4,5,6 dann hab ich aber 7 stellen weiter gemacht und soll aber nur 6 allerdings bin ich dann bei der richtigen stelle!

    Das verstehe ich nicht...



  • Ist das den garantiert, dass die Speicherbereiche direkt hintereinander liegen? Oder kann der Speicher nicht auf vier Byte ausgerichtet sein? Am besten du vergleichst die Adressen.



  • Ich mach doch hier speicherzugriffe auf ein char array und die sind doch immer ein byte groß und da es hier ein statisches array ist müssen doch die chars auch hintereinander im speiche rliegen



  • Jetzt verstehe ich, was du willst. 😃
    Du zählst ja auch die Schritte bis dorthin. Bei null Schritten trittst du auf dem Fleck und bei 6, landest du auf dem 7 Platz. Verständlicher?



  • Man Bandchef! Ist Plusrechnen so schwer?

    Was gibt: p = p + 0? Natürlich p! welches 'a' ist.
    Was gibt: p = p + 1? 's'
    Was gibt: p = p + 2? 'd'
    Was gibt: p = p + 3? 'f'
    Was gibt: p = p + 4? 'g'
    Was gibt: p = p + 5? '0'
    Was gibt: p = p + 6? 'q'

    Ich verzweifel gelich, hilfe! 😃

    Nimms mir nicht übel 😉



  • Wenn ich mir nun die Adressen ausgeben lasse, dann erscheint folgendes:

    3DFD4C - 3DFD52

    sind also tatsächlich 6 adressen...

    Aber warum lande ich dann beim 'q' anstatt beim \0? Ich verstehs einfach nicht... Damit ich das auf meiner Skizze tu, muss ich 7(!) Schritte gehen... Nicht 6...



  • Ahja Danke!

    Ich darf nicht die Schritte zählen sondern muss die Adressen aufaddieren. So einfach war das! 🙂



  • So, noch eine Frage:

    Jetzt versetze ich mit

    *(p++) = *q;
    *(p+1) = 's';

    den Pointer p an den Index 2 respektive Stelle 3 im Array. Aussehen tuts so:

    | <- *p
    -------------------------
    | a | s | s | f | g | 0 |
    -------------------------
      0   1   2   3   4   5
    
    -------------------------
    | q | w | e | r | 0 |   |
    -------------------------
      6   7   8   9   10  11
    

    Dann möchte ich mit *(p+7) = 'h'; ein h an den Index 8 bzw. Stelle 9 schreiben, oder nochmal anders das 'e' durch ein 'h' ersetzen. p ist ja nun 2.

    Wie geht das da jetzt? So wie vorher? Jetzt muss ich 7 mal eine 1 addieren. Jetzt komm ich beim r raus... Man ich werd echt noch bekloppt hier...



  • Mich wundert es nicht.

    p++ verändert p!

    Wenn du p veränderst dann solltest du dich über das Ergebnis nicht zu wundern. Poste man den gesamten Code, der dein Verhalten reproduziert.



  • bandchef schrieb:

    Ahja Danke!

    Ich darf nicht die Schritte zählen sondern muss die Adressen aufaddieren. So einfach war das! 🙂

    Das ist doch das Gleiche. Eine Adresse weiter ist ein Schritt weiter.

    Du musst die Schritte zählen und nicht die Positionen.

    Dein Bild ist da korrekt.



  • Wenn ich 7 Schritte zähle, dann komm ich beim e raus. Warum aber darf ich dann beim ersten Mal, also da wo p 0,0 steht, nicht die Schritte zählen? Denn da muss ich ja anscheinend das hier machen:

    Was gibt: p = p + 0? Natürlich p! welches 'a' ist.
    Was gibt: p = p + 1? 's'
    Was gibt: p = p + 2? 'd'
    Was gibt: p = p + 3? 'f'
    Was gibt: p = p + 4? 'g'
    Was gibt: p = p + 5? '0'
    Was gibt: p = p + 6? 'q'

    Ich erkenn da halt einfach kein Schema... Am Anfang muss addieren und jetzt soll ich auf einmal wieder die Schritte zählen... Was mir ja einleuchtet weil ich ja sonst nicht an die Position komm. Aber es kann doch nicht sein, dass ich es einmal so und einmal so machen muss...


Anmelden zum Antworten