Post- und Prefix Notation?



  • Ahja, wenn ich also schreibe *&j = 7; dann kann ich gleich bloß j = 7; schreiben, weil sich *& gegenseitig aufheben. Kann man das mit -1+1=0 vergleichen? Das hebt sich ja auch auf...?

    Gleich noch mal eine neue Frage:

    Was passiert hier:

    int a = 5, b;
        int *p;
    
    	p = &a;
    	printf("%u\n\n", p);
    
    	*p = *p * *p;
    	printf("%u", p);
    

    In p steht die Adresse von a. Und nun multipliziere ich zwei (gleiche) Pointer miteinander... Was passiert da? Wenn ich mir nach der Multiplikation den pointer ausgebe, dann ist es die gleiche Adresse wie vorher...



  • Ja du kannst j = 7 schreiben. Den Vergleich " -1+1=0 " finde ich etwas sonderbar, ich würde es eher mit Wellen Vergleich die sich gegenseitig auslöschen (Wasser,Ton,...)

    &variable //Adresse von variable (Wert->Adresse) 
    *pointer //Dereferenzierung einer Adresse/Pointers (Adresse->Wert) 
    
    *&variable // Wert -> Adresse -> Wert sinnvoll?
    

    Frage zwei:

    int a = 5;
        int *p;
    
        p = &a;   //p zeigt auf a welches 5 ist
        printf("%u\n\n", p);
    
        printf("%i\n\n", *p); //Ausgabe WERT von p!
    
        *p = *p * *p; // Wert auf den pointer zeigt (also a) = Wert auf den Pointer zeigt (also a) MAL Wert auf den Pointer zeigt (also a)
    //anderst ausgedückt könntest du hier " a = a * a " schreiben!
    //Somit wird der pointer natürlich NICHT verändert.
        printf("%u", p);
    
        printf("%i\n\n", *p); //Ausgabe WERT von p!
    


  • printf hat für Pointer extra ein %p:

    printf("%p", p);
    

    Dann passt das, egal wie groß der Pointer ist (Anzahl der Bit))

    Wenn du *int p; hast, dann ist *p (mit dem 😉 so wie ein normales int.
    p (ohne 😉 ist der Zeiger.



  • Ich hab dann noch eine Frage:

    Bleiben wir bei Pointer:

    Was macht dann -*p? Man kann das ja auch als -(*p) schreiben. Bekommt da der der Wert der ja durch *p dereferenziert ein Minus? Oder wird da irgendwas an der Adresse gedreht?



  • Probiere es doch einfach aus!!!!! Sei mal selbstständiger. Du musst doch nur die Adresse und den Wert vor der Operation und nach der Operation ausgeben. Dann siehst du auch was passiert.



  • Gut du hast Recht. Wenn man es ausprobiert sieht man es. Ich habs jetzt mal so ausprobiert:

    int a = 5, b = 0;
        int *p = &a;
    
    	printf("p_vorher = %p\n\n", p);
    	printf("b_vorher = %i\n\n", a);
    
    	b = -*p;
    	printf("p_nachher = %p\n\n", p);
    	printf("b_nachher = %i\n\n", a);
    

    Meine Konsolenausgabe:

    p_vorher = 0024FF0C
    b_vorher = 5
    p_nachher = 0024FF0C
    b_nachher = 5

    Was schleiße ich nun daraus? Dass das irgendwie ja nix bewirkt hat. Weder hat es an der Adresse noch am Wert was verändert....



  • Schau dir mal den Wert von b an! Deine Ausgabebezeichnung ist falsch btw.

    int a = 5, b = 0; 
        int *p = &a; 
    
        printf("p_vorher = %p\n\n", p);
        printf("*p_vorher = %i\n\n", *p); 
        printf("a_vorher = %i\n\n", a);
    	printf("b_vorher = %i\n\n", b); 
    
        b = -*p; 
        printf("p_nachher = %p\n\n", p);
        printf("*p_nachher = %i\n\n", *p);  
        printf("a_nachher = %i\n\n", a);
    	printf("b_nachher = %i\n\n", b);
    


  • Ja, hier war wirklich nur die Ausgabebezeichnung falsch.

    Nochmal zur Thematik von %i, %p, %u.

    int a = 5, *p;
    p = &a;
    
    printf("a = %i\n\n", a);   //Ausgabe a = 5;
    printf("p = %p\n\n", p);   //Ausgabe der Adresse in Hex
    printf("p = %i\n\n", p);   //Ausgabe der Adresse in Dez
    printf("p = %u\n\n", p);   //Ausgabe der Adresse in Dez
    

    Irgendeinen Unterschied muss aber %u zu %i haben, oder? Auf meinen Bildschirmausgaben sehe ich aber keinen...

    Das hier hab ich noch nicht so verstanden:

    printf hat für Pointer extra ein %p:
    C/C++ Code:
    printf("%p", p);

    Dann passt das, egal wie groß der Pointer ist (Anzahl der Bit))

    Wenn du int *p; hast, dann ist *p (mit dem 😉 so wie ein normales int.
    p (ohne 😉 ist der Zeiger.




Anmelden zum Antworten