Daten aus einem Speicher in einen anderen schreiben mittles Pointer
-
Hallo zusammen, habe eine Frage bezüglich Zeiger.
Habe Speicher A und B. Speicher A hat Daten gespeichert (z.B. 0x01, 0x02, 0x03, 0x04, 0x05)
Speicher B ist unbeschrieben (0xFF...0xFF)Adresse Speicher A (Adressen) Speicher B (Adressen)
1...........0x0000A1 .............. 0x0000B1
2...........0x0000A2 .............. 0x0000B2
3...........0x0000A3 .............. 0x0000B3
4...........0x0000A4 .............. 0x0000B4
5...........0x0000A5 .............. 0x0000B5Jetzt möchte ich mittels Zeiger Daten aus dem Speicher A im Speicher B speicher.
ich dachte etwa an sowas, wobei das ganze über Adressen gehen soll,for( int i=0;i<5;i++) { Zeiger_Speicher_B=Zeiger_Speicher_B; Zeiger_Speicher_B++; Zeiger_Speicher_A++; }
-
snoopy9134 schrieb:
for( int i=0;i<5;i++) { *Zeiger_Speicher_B = *Zeiger_Speicher_A; Zeiger_Speicher_B++; Zeiger_Speicher_A++; }
oder:
for( int i=0;i<5;i++) { Zeiger_Speicher_B[i] = Zeiger_Speicher_A[i]; }
-
Dankschön, werds ausprobieren !
-
Um den Umgang mit Zeigern zu üben, ist das so eine gute Sache. In Produktionscode ist es aber idR sinnvoller,
#include <string.h> ... memcpy(Zeiger_Speicher_B, Zeiger_Speicher_A, sizeof(*Zeiger_Speicher_A) * 5);
zu schreiben, weil memcpy von vielen Compilern durch für die Zielplattform handoptimierten Maschinencode implementiert wird, der um einiges schneller als eine Zeigerschleife ist. Auf x86 und x86-64 kann man beispielsweise einen Haufen SSE-Anweisungen erwarten, und teilweise werden auch ganze Speicherseiten auf einmal verarbeitet, wenn die Bereiche ausreichend groß sind.
Wenn Ziel- und Ursprungsbereich sich überlappen, musst du statt memcpy memove benutzen. Der Aufruf ist ansonsten genau der Gleiche.