konstrukt?? kann sowas funktionieren



  • Hallo Leute,

    habe leider ein Problem mit folgendem Konstrukt:

    int a=10;
     int *b;
     b = (int *) malloc (sizeof(int));
     *b =12;
    
      printf ("a=%d &a=%p *(&a)=%d\n", a, &a, *(&a));
      printf("b=%d *b=%p &b=%d\n",b ,*b, &b);
    

    Kenn so ein Konstrukt *(&a) nicht.
    Was soll da zurückkommen? ein normaler int?
    Bitte um Hilfe.

    Danke
    luis
    😉



  • s.luis schrieb:

    Kenn so ein Konstrukt *(&a) nicht.

    Na und? Du kannst dir doch die Bedeutung aus * und & erschließen:

    Was soll da zurückkommen? ein normaler int?

    &a ist ein Zeiger vom Typ int* auf a. *(&a) ergibt einen lvalue dessen, worauf der Zeiger zeigt ... also wieder a.



  • Was soll da zurückkommen? ein normaler int?

    &a ist ein Zeiger vom Typ int* auf a. *(&a) ergibt einen lvalue dessen, worauf der Zeiger zeigt ... also wieder a.

    okay verstehe und für was kann man sowas brauchen? so würde ich einfach a hinschreiben und es ist ja das gleiche oder?



  • Die Klammern sind übrigens nicht nötig.



  • s.luis schrieb:

    okay verstehe und für was kann man sowas brauchen? so würde ich einfach a hinschreiben und es ist ja das gleiche oder?

    Ja, es ist das Gleiche. Es soll wohl nur zeigen, dass & das quasi Gegenteil zu * ist.

    Edit: Was mich zu der Frage bringt: Ist es wirklich das Gleiche? Ist das ein Ausdruck, oder zwei? Oder drei?

    Edit2:

    void *p = 0;
    &*p;
    

    Funktioniert nicht, weil man void* nicht dereferenzieren darf. Was mich zu der Ansicht bringt, dass es zwei Ausdrücke sind. Was mich zu der Ansich bringt, dass

    int *p = 0;
    printf("%p", &*p);
    

    Illegal ist.

    (Ist hier natürlich egal, sind nur meine Spinnereien. 😉 Aber es zeigt halt, dass der Ausdruck &*x zwar zu x äquivalent sein kann, aber niemals gleich ist.)



  • Die Formatspecifier von printf bei b sind falsch.
    Bei int *b;
    b ist ein Pointer
    *b ist ein int
    &b ist ein Pointer
    Also

    printf("b=%p *b=%d &b=%p\n", b ,*b, &b);
    


  • DirkB schrieb:

    Die Formatspecifier von printf bei b sind falsch.
    Bei int *b;
    b ist ein Pointer
    *b ist ein int
    &b ist ein Pointer
    Also

    printf("b=%p *b=%d &b=%p\n", b ,*b, &b);
    

    stimmt hast recht der compiler schmeisst es einen um die ohren.
    danke für eure schnelle hilfe.

    👍 👍 👍 👍


Anmelden zum Antworten