pointer problem

Gast #947683
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
Gast
> 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
Persönliche Seite
> 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.
Gast
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.
Gast
@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.
Gast
Übrigends:
1
// Mann kann statt
2
*writepointer = 5;
3
// auch
4
writepointer[0] = 5;
5
// schreiben, wenn das zur besseren Lesbarkeit beiträgt ;-)
übrigens ...
1
int feld[N], int * p = feld;
2
int idx = 0; // ... zwischen 0 und N-1
3
bool b = feld[idx] == *(p+idx); // oder auch p[idx]

b immer true, zB mit assert testbar

oder more abstract
1
int feld[N][M][T], * p = &feld[0][0][0];
2
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

Eine eigene Frage? Dieser Thread ist über 18 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.