Wie kann man die Speicherposition in einem Zeiger um ein bzw. zwei BYTE erhöhen
-
Hallo,
ich habe einen Pointer zu einer Speicheraddresse, sagen wir *MemoryPosition.
Nun möchte ich die Werte die dort nacheinander abgelegt sind auslesen. Dazu muss ich doch die Adressen um die Größe des entsprechenden Datentyps erhöhen. Nehmen wir an, dann an *MemoryPositions Daten mit zwei BYTE Länge abgelegt sind.
Kann mir bitte jemand sagen, wie ich den Speicherbereich durchschreiten kann oder in anderen Worten den Zeiger zu *MemoryPosition um zwei BYTE erhöhe um den nächsten Wert zu holen?
Vielen Dank,
Frodo
-
Stichwort Zeigerarithmetik
-
ser1al schrieb:
Edit1->Text = IntToStr((test[0])+1); //damit greifst auf test[1] zuFalsch, damit greifst du auf test[0] zu und addierst 1 zu dessen Inhalt (probier's mal aus, indem du andere Werte vorher einträgst).
@Frodo: Der Compiler weiß selber am besten, wie groß deine Daten sind - deshalb schiebt der Ausdruck "++p;" den Zeiger immer um die richtige Strecke weiter, egal ob p nun auf einen char, int oder my_special_class zeigt.
(das klappt natürlich nur solange, wie du den Pointer nicht wild in andere Typen umcastest).
-
richtig, war ein kleiner fehler von mir!
das meinte ich eigentlich:
int array[7]; *array = 5; //erstes element *(array+1)=7; //auf ein element weiter
-
Naja, nicht ganz meine Problematik.
unsigned char *pDataBuffer; // Das ist die Definition von pDataBuffer
*pDataBuffer // Das ist der Zeiger zum Start eines
// AddressbereichesIn diesem Bereich (ab *pDataBuffer) sind zwei-Byte lange Datenwerte angeordnet.
Nun will ich diese nacheinander auslesen. Wie mache ich die zwei-Byte langen Schritte und wie geht die Zuweisung in Variablen.
-
data_t* typedbuffer=pDataBuffer; for(int i=0;i<iDataLength/sizeof(data_t);++i) { data_t val=typedbuffer[i]; //verarbeite val }