pointer problem

Gast #947683
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
Gast #947688
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
Persönliche Seite #947689
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.
Gast #947758
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.
#947820
Lesenswert?

ü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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren