Forum: Compiler & IDEs Pointer? Wie?


von Fabian H. (Gast)


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!

von Dieter Brüggemann (Gast)


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

von Joerg Wunsch (Gast)


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.

von Andreas S. (andreas) (Admin) Benutzerseite


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

von Joerg Wunsch (Gast)


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.

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von Joerg Wunsch (Gast)


Lesenswert?

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

von Joerg Wunsch (Gast)


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!

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.