mikrocontroller.net

Forum: Compiler & IDEs pointer problem


Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo habe da ein Prob. mit dem verständniss von pointern.

Dies sollte bestimmt für die meisten kein prob.sein.

Hanb ein Buffer (unsigned char WriteBuffer[60];) mit 60 Elementen.

Auf den lasse ich einen pointer (unsigned char  *writepointer  = NULL;)
zeigen. writepointer = WriteBuffer;

Was passiert den eigentlich wenn ich meinen pointer einen Wert zuweise.
z.B.   *writepointer = 5;  wird dan die 5 auch in WriteBuffer[0] 
geschrieben???

sam

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was passiert den eigentlich wenn ich meinen pointer einen Wert zuweise.
> z.B.   *writepointer = 5;  wird dan die 5 auch in WriteBuffer[0]
> geschrieben???
Mit *writepointer = 5 weist ja ja nicht dem Pointer einen Wert zu sonder 
dem ort wo der Pointer hinzeigt. Was Identisch mit WriteBuffer[0] ist

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was passiert den eigentlich wenn ich meinen pointer einen Wert zuweise.
> z.B.   *writepointer = 5;  wird dan die 5 auch in WriteBuffer[0]
> geschrieben???

Wenn Du den Pointer dereferenzierst (das tust Du mit dem 
vorangestellten Sternchen), dann weist Du nicht dem Pointer einen Wert 
zu, sondern dem, worauf der Pointer zeigt.

Wenn also writepointer auf WriteBuffer zeigt, dann schreibst Du in 
der Tat in das erste Element des Arrays.

Also: Richtig vermutet.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abgesehen davon, ist es in deinem Fall evtl. sinnvoller, keinen Pointer 
in das Array zu benutzen, sondern einfach den entsprechenden Array-Index 
als normales unsigned char zu speichern.

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum willst Du Zahlen in ein Zeichenarray schreiben ?

Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
war nur ein beispiel. ich schreibe zeichen in das Array. danke für die 
gute erklärung

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@pete: nur weil der Datentyp 'char' heißt, bedeutet das nich lange 
nicht, dass man nur Zeichen darin speichern sollte.
'char' ist einfach nur ein Datentyp, der ein Byte lang ist. Nicht mehr 
und nicht weniger. Der kann entweder von -127 bis 128 gehen, oder von 0 
bis 255 (für unsigned char). Das sich ein Byte auch gemäß ASCII Tabelle 
als Zeichen interpretieren läßt, interessiert den uC und den Compiler 
erstmal gar nicht.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigends:

// Mann kann statt
*writepointer = 5;
// auch
writepointer[0] = 5;
// schreiben, wenn das zur besseren Lesbarkeit beiträgt ;-)


Autor: Daniel S. (theoretiker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
übrigens ...
int feld[N], int * p = feld;
int idx = 0; // ... zwischen 0 und N-1
bool b = feld[idx] == *(p+idx); // oder auch p[idx]

b immer true, zB mit assert testbar

oder more abstract
int feld[N][M][T], * p = &feld[0][0][0];
bool b = feld[i][j][k] == *(p+i*M*T+j*T+k);

dieses maping Vorgehen scheint üblich, um nicht zu sagen
standard, zu sein, um mehrdimensionales auf
eindimensionales abzubilden.

Grüsse

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.