www.mikrocontroller.net

Forum: Compiler & IDEs Pointer? Wie?


Autor: Fabian H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Bin Anfänger in C und habe bis jetzt noch nicht verstanden, wie ich 
Pointer benutze. Ich will eine art dyn. Array zum Speichern von 
Messwerten im SRAM anlegen.

Kann mir jemand erklären wie man Pointer benutzt oder ein Link zu einem 
guten C-HOWTO posten???

Danke!

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Fabian

Bin auch Anfänger in C und habe das so verstanden.

Pointer sind Zeiger auf Speicherstellen. Jede Variable belegt ja 
irgendwo Speicherplatz, der auch entsprechende Adressen hat. Der Pointer 
weiß halt nun, wo die Variable im Speicher liegt und kennt die Adresse 
dieser. Großer Vorteil der Pointer ist halt nun, das man mit diesen 
rechen kann.

Kleines Beispiel:

unsigned char daten[20] ="Hallo Welt";         //Array anlegen
unsigned char *zeiger = &daten[0]; //zeiger auf erste Stelle des Arrays 
einstellen

*zeiger zeigt jetzt auf die erste Adresse im Speicher der Variable daten

temp = *zeiger;   //einstellen auf erste Stelle = H
temp = *++zeiger;   //einstellen auf zweite Stelle = a
temp = *--zeiger;   //einstellen auf erste Stelle = H

Hoffe habe das so eingermaßen verstanden und rübergebracht.

Bin für jede weitere Erklärung Dankbar.

MFG
Dieter

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned char *zeiger = &daten[0];

läßt sich übrigens einfacher schreiben als:

unsigned char *zeiger = daten;

Wenn man ein Array ,,im Ganzen'' irgendwo benutzt (Zuweisung,
Übergabe an eine Funktion), dann wird von diesem stets nur ein
entsprechender Zeiger weitergegeben.  Die Zeigerarithmetik
funktioniert damit dann genauso:

unsigned char *zeiger = daten + 1;

wäre identisch zu

unsigned char *zeiger = &daten[1];
Übrigens ist "char" ein schlechtes Beispiel für einen Datentyp
für Zeigerarithmetik, da die Größe eines "char" ohnehin ein
Byte ist.  Interessanter ist schon:

int daten[] = {
   3, 4, 1, 22785;
};

int *zeiger;

zeiger = daten + 3;

In diesem Falle zeigt "zeiger" nicht etwa auf 3 Bytes nach
dem Anfang von "daten", sondern auf wieviel Speicherplatz
auch immer 3 Elemente vom Typ "int" belegen, d. h. es wird
damit genauso wieder ein Zeiger auf eine Speicherstelle
dargestellt, die 22785 enthält.  Ist also ebenfalls identisch
zu

zeiger = &daten[3];

Ansonsten wollte Fabian sicher wissen, wie man malloc()
benutzt, aber das sollte man wirklich in einem guten Buch
nachlesen.  Es ist zu viel, als daß ich darüber noch dazu in
einem häßlich zu bedienenden Web-Forum (*) eine Abhandlung
schreiben würde.

(*) Das bezieht sich nicht etwa nur auf dieses Forum hier,
sondern allgemein auf Web-Foren.  Das bißchen Form-Editor in
einem Web-Browser ist einfach gruselig, wenn man ansonsten
einen ordentlichen Editor gewohnt ist.  Für Mailinglisten oder
Newsgruppen kann ich meinen Standardeditor benutzen, da bin
ich noch eher geneigt, ein paar Sätze mehr zu schreiben.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg, probier's doch mal mit Emacs-w3m auf
http://www.mikrocontroller.net/forum-extern/. Oder bist du einer von
der vi-Fraktion? ;-)

Andreas

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bezweifle, dass mein alter Emacs schon ein brauchbares w3m
hat. :)  Aber Du hast Recht, vielleicht sollte man sich fuer
solche Foren dann eher den w3m antun als einen ,,normalen''
Browser...  Nein, vi benutze ich nur ,,fuers Editieren zwischendurch'',
fuer die normale Arbeit laeuft bei mir auch ein Emacs.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich meine nicht den internen Emacs-Browser w3 (ohne m), der ist IHMO
eine ziemliche Gurke, sondern emacs-w3m, ein "Plugin" das den
Textbrowser w3m in den (X)Emacs einbindet. Funktioniert prima, aber
leider kann meine Version im Moment noch nicht so richtig mit Cookies
umgehen, so dass man Name und Email immer neu eingeben muss. Trotzdem
ist das besser als Mozilla & Co.

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, muß ich mir dann mal angucken, das kannte ich noch gar
nicht...

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, wollte nur mal schreiben, daß ich mir das nun endlich mal angetan
habe.  Ja, das ist in der Tat für derartige Foren deutlich praktischer
als ein Galeon.  Danke nochmal für den Tip!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.