Hallo! Ich beschäftige mich längere Zeit mit der C-Programmierung für
Mikrocontroller. Vorher habe ich ausschließlich in Assembler
programmiert. Nun, ständig laufen mir die Pointer über den Weg.
Allerdings, so richtig verstehe ich den Umgang mit dieser Funktion
nicht. Gibt es irgendwo einen gute Literatur, wo man sich Information
besorgen kann ? Kann auch ein pdf oder ein Link sein!
Danke vorab für Eure Beiträge !!!!
Das sind keine Funktionen.
Der Ausdruck 'Pointer' wird in 2 Zusammenhängen benutzt_
* als Synonym für 'Adresse von'
* als Variable in der eine Speicheradresse gespeichert wird.
Wenn du Assembler programmiert hast, dann kennst du wahrscheinlich
Pointer bereits:
Stell dir vor, du hast ein Register (Registerpärchen) indem
du die Speicheradresse speicherst, von der du tatsächlich
lesen möchtest. Um tatsächlich zu lesen, programmierst du
dass der Zugriff indirekt über dieses Register oder
Registerpärchen geführt werden soll.
Genau das ist in C-Terminologie ein 'Pointer'.
Wenn Du Dich ohne Vorkenntnisse mit C beschäftigen willst, solltest Du
Dir sowieso ein entsprechendes Buch zulegen (leihen oder kaufen). Imho
ist das Buch von den C-Erfindern Kernighan und Ritchie ein ziemlich
gutes Werk. Da ist auch die Sache mit den Pointern recht gut erklärt.
Ansonsten hat Karl Heinz ja schon eine Erklärung geliefert. Ein Zugriff
mit einem Pointer (auf deutsch Zeiger) ist ein indirekter Zugriff, bei
dem die betreffende Variable nicht direkt, sondern über ihre Adresse
angesprochen wird, so wie es in AVR-Assembler z.B. mit ld(d) oder lpm
gemacht wird. Der Zeiger zeigt nur auf die Variable...
Hallo Stefan! Mit Pointern ist's ähnlich wie mit dem Deppenapostroph
(s. "Info's zu Pointern". Statt überall sinnlos Apostrophe zu
setzen, schreibst du vor jeden Variablennamen ein "*" und schon
klappt's mit den Pointern.
Beispiel: Statt
int info;
info=42;
schreibst du
int *info;
*info=42;
Es kann noch Unannehmlichkeiten entsprechend nervigen Antworten auf
Deppenapostrophe geben, die dann in Form von Segmentation faults
auftreten. Um das zu verhindern müsstest du deutsch bzw. C schreiben
lernen.
@Unbekannter:
Das ist sogar noch schlimmer, das ist kein Deppenapostroph, sondern ein
Deppenakzent:
Info´s
und nicht
Info's
In keiner westeuropäischen Sprache wird der Plural durch Anhängen eines
Apostroph-s gebildet, noch weniger durch Anhängen eines Akzent-s. Es
gibt zwar Vermutungen, daß das bei einigen FNBL-Dialekten doch der
Fall wäre, aber das will & mag ich nicht glauben. So schlecht kann doch
die Bildung auch dort nicht gewesen sein.
Zurück zum Thema:
Beispiel: Statt
int info;
info=42;
schreibst du
int *info;
*info=42;
Dieses gutgemeinte Beispiel geht in die Hose, weil der Pointer, der
hier verwendet wird, irgendwohin zeigt. Den Zahlenwert aber
"irgendwohin" zu schreiben ist selten sinnvoll und wird auch nur
selten den erwünschten Effekt haben.
Damit man einen Pointer so verwenden kann, muss er initialisiert
werden, d.h. auf eine sinnvolle Adresse zeigen:
int info;
int *pointer;
pointer = &info;
*pointer = 42;
Inhaltlich hat Karl Heinz alles wesentliche gesagt; ich frage mich ein
bisschen, wie man Assembler programmieren können will, wenn dieses
Konzept unverständlich ist ... aber jeder hat seine persönliche
Herangehensweise an ein Problem und vielleicht hat es bei Stefan jetzt
auch schon längst sehr laut "Aha!" gemacht und eine leichte
Schamesröte sein Gesicht erobert ...
Danke für Eure Beitrage !
@ Rufus
Auch schön, dass es doch immer noch Leute mit klügen Sprüchen gibt..
Naja, auch danke für deinen unpersönlichen Beitrag !!!
Gruss Stefan
Ärgerlich finde ich, daß selbst, wenn man es mögichst diplomatisch
formuliert, die Leute immer gleich verärgert sind, wenn man sie auf
ihre Rechtschreib-, Zeichensetzungs- oder ähnliche Fehler aufmerksam
macht. Die meisten wissen sonst nicht, daß es falsch ist und machen es
immer wieder falsch. Die Antwort auf diese Hilfe liegt fast immer je
nach Laune zwischen einfachem Ignorieren und wüsten Beschimpfungen,
weshalb ich mich meist lieber zurückhalte. Schade eigentlich, daß
niemand mehr überhaupt wissen will, was er falsch macht.
> Schade eigentlich, daß niemand mehr überhaupt wissen will, was er> falsch macht.
Leider. Aber ich persönlich sehe Korrekturen meiner Fehler immer gerne
- nur so lernt man dazu!
----, (QuadDash).