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
> 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
> 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.
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.
war nur ein beispiel. ich schreibe zeichen in das Array. danke für die gute erklärung
@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.
Ü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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.