Pointer? Wie?

Gast #39739
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!
Gast
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
Gast
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.
Gast
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.
Admin Persönliche Seite
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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.