Forum: Mikrocontroller und Digitale Elektronik Info´s zu Pointern


von Stefan (Gast)


Lesenswert?

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 !!!!

von Karl H. (kbuchegg)


Lesenswert?

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'.

von johnny.m (Gast)


Lesenswert?

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...

von Jörg S. (Gast)


Angehängte Dateien:

Lesenswert?


von Unbekannter (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

@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 ...

von Stefan (Gast)


Lesenswert?

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

von Harry (Gast)


Lesenswert?

Vor Sattzzeichen kommen keine Leerzeichen.

Und mehrere Ausrufezeichen hintereinander ... ein sicheres Zeichen für
einen kranken Geist.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Vor Sattzzeichen kommen keine Leerzeichen.

Das nennt sich Plenken ;)

von Rolf Magnus (Gast)


Lesenswert?

Ä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.

von QuadDash (Gast)


Lesenswert?

> 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).

von Kranker Geist (Gast)


Lesenswert?

...

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
Noch kein Account? Hier anmelden.