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.
Beiint *b;
b ist ein Pointer
*b ist ein int
&b ist ein Pointer
Alsoprintf("b=%p *b=%d &b=%p\n", b ,*b, &b);
-
DirkB schrieb:
Die Formatspecifier von printf bei b sind falsch.
Beiint *b;
b ist ein Pointer
*b ist ein int
&b ist ein Pointer
Alsoprintf("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.