Forum: Compiler & IDEs pointer problem


von Sam (Gast)


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

von Peter (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Klaus (Gast)


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.

von Pete K. (pete77)


Lesenswert?

Warum willst Du Zahlen in ein Zeichenarray schreiben ?

von Sam (Gast)


Lesenswert?

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

von Klaus (Gast)


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.

von Matthias (Gast)


Lesenswert?

Übrigends:
1
// Mann kann statt
2
*writepointer = 5;
3
// auch
4
writepointer[0] = 5;
5
// schreiben, wenn das zur besseren Lesbarkeit beiträgt ;-)

von Daniel S. (theoretiker)


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

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.