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 .............. 0x0000B5

    Jetzt 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];
    
    }
    


  • @Belli

    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.


Anmelden zum Antworten