Hallo, ich hab noch mal ne kurze Frage zu Zeigern. Wenn ich einen schon vorhandenen einem andern übergebe, dann ist doch die Adresse in diesem gespeichert und wenn ich den neuen Zeiger manipuliere, so wird der alte nicht verändert, also die Adresse in ihm. Wieso fuktioniert das bve FILE-Zeigern nicht, wenn ich genau so verfahre und zum Bsp. einen Zeiger an fgetc(FILE *) übergebe, dann funktioniert das wie gewollt, doch wenn ich fgetc noch mal mit einem anderen Zeiger, der auf die gleiche Datei zeigt ausführen will, so klappts nicht ohne rewind. Ich würd nur genr wissen, wo mein Verständnisproblem ist, danke schon mal!!! Bis dann.
Der FILE Zeiger ist sicher ein Zeiger auf eine Struktur. Dadurch das du den Zeiger kopierst bekommst du keine Kopie dieser Struktur. In der Struktur wird die Dateiposition gespeichert. Ob du nun mit Zeiger A auf die Datei zugreifst oder mit Zeiger B, die Dateiposition für Zeiger A UND für Zeiger B wird gleichzeitig verändert weil du keine Kopie der Struktur hast, sondern nur zwei Zeiger auf EINE Struktur. Das müsste so ungefähr hinkommen ;)
Also C von A bis Z von Galileocomputing sagt folgendes: "...Der FILE-Zeiger – es wird ja auch von einem FILE-Stream gesprochen – ist eine Struktur, die in der Headerdatei <stdio.h> deklariert ist. Diese Struktur beinhaltet alle Informationen, die für die höheren Datei-E/A-Funktionen benötigt werden, beispielsweise: gp den Puffer – die Anfangsadresse, den aktuellen Zeiger, die Größe gp den File-Deskriptor (mehr dazu bei den Funktionen der niedrigeren Ebene) gp die Position von Schreib-oder Lesezeiger gp die Fehler- und EOF-Flags ...", Also scheint deine Erklärung zu stimmen! Danke, wieder was gelernt :-)!
Da hat der Gali aber was verwechselt: Der FILE Pointer ist keine Struktur, sondern ein Zeiger auf eine Struktur vom Typ FILE.
Stimmt, is mir gar nich aufgefallen, dann sollte man das dem Gali vielleicht mal mitteilen....
Eigentlich sollte einen gar nicht interessieren, was FILE ist. In der Regel wird's wohl eine Struktur sein, da das eine sinnvolle Implementation ist, aber generell ist es einfach irgendein Datentyp, der von den File-Funktionen intern genutzt wird. Man muß eigentlich nur wissen, daß open einen Zeiger darauf zurückliefert und man an alle anderen File-Funktionen diesen übergeben muß. > Hallo, ich hab noch mal ne kurze Frage zu Zeigern.Wenn ich einen schon > vorhandenen einem andern übergebe, dann ist doch die Adresse in diesem > gespeichert und wenn ich den neuen Zeiger manipuliere, so wird der alte > nicht verändert, also die Adresse in ihm. Genau. > Wieso fuktioniert das bve FILE-Zeigern nicht, wenn ich genau so > verfahre und zum Bsp. einen Zeiger an fgetc(FILE *) übergebe, dann > funktioniert das wie gewollt, doch wenn ich fgetc noch mal mit einem > anderen Zeiger, der auf die gleiche Datei zeigt ausführen will, so > klappts nicht ohne rewind. Wo ist denn da der Unterschied? Ein Zeiger auf int verhält sich doch genauso. Wenn ich den kopiere, dann über das Original den int verändere, sehe ich auch über den anderen Zeiger den veränderten int-Wert und nicht den von vor der Kopieraktion.
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.