Hallo zusammen, ich habe folgendes Konstrukt: main.c ------ #include "f.h" int a[3]={1,2,3}; void main(void){ f(); } f.c --- extern int a; void f(void){ int *pa = a; ... } Nun zeigt pa jedoch nicht auf a sondern auf eine gänzlich andere Adresse. Habe in der Literatur dazu nichts finden können. Hat jemand einen Lösungsvorschlag? Gruß, Stefan
Mal wieder zu schnell! main.c ------ #include "f.h" int a[3]={1,2,3}; void main(void){ f(); } f.c --- extern int *a; void f(void){ int *pa = a; ... } Nun zeigt pa jedoch nicht auf a sondern auf eine gänzlich andere Adresse. Habe in der Literatur dazu nichts finden können. Hat jemand einen Lösungsvorschlag? Gruß, Stefan
Mit einem uebersetzbaren Beispiel waere es einfacher, dir zu helfen. Oft verschwinden die Probleme naemlich mit dem "unnoetigen" weggelassenen Code...
Hallo Stefan, extern int *a; muß extern int a[]; heissen. Ich würde aber eine Übergabe als Parameter bevorzugen.
Morgen, das war es in der Tat. Leider kann ich es nicht nachvollziehen, da beide Konstrukte für mich einen Pointer darstellen. Hat jemand Lust und Muße zu einer kurzen Erklärung? Gruß, Stefan
In der Tet, *a und a[] sind beides Pointer. Aber das zweite ist auch ein Array und das wird vom Compiler/Linker unterschieden...
Hallo Stefan, der Compiler findet *a nicht, weil du ja a[] definiert hast. Sehr wohl findet er aber a, und das ist in main.c die Zeigeradresse auf das erste Element von a[] extern int *a in f.c dereferenziert nun den Zeiger: in a liegt aus der Sicht von f.c also nicht mehr der Zeiger sondern der erste Wert des Arrays (in diesem Fall 1).
> extern int *a; Dort wo a im Speicher liegt, ist ein Pointer zu finden, der auf ein int zeigt. > extern int a[]; Dort wo a im Speicher liegt, ist ein int-Array zu finden, also direkt der erste Wert vom Array. Im ersten Fall wird also der erste Wert des Int-Arrays als Pointer auf einen anderen Int interpretiert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.