2017-05-08 15 views
0

Ich versuche, die Werte von einem Array zu einem anderen zu kopieren, indem Sie streng Zeigerarithmetik verwenden. Dies ist der Code, den ich jetzt haben:Kopieren von Werten von einem Array in ein anderes in C mit Zeigerarithmetik

int *p; 
    int arraySize = 20; 

    int array[arraySize];  

    for (p = array; p< array+(sizeof(array)/sizeof(int)); p++){ 
     int random = rand() % 200; 
     *p = random; 
    } 

    for (p = array; p< array+(sizeof(array)/sizeof(int)); p++){ 
     printf("%d\t%x\n", *p, p); 
    } 

    //the code above works fine 

    printf("\n"); 

    //grow the new array by one to insert value at end later 
    int array2[(arraySize+1)]; 

    int *p2; 

    for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
     *(p2) = *(p); 
    } 

    for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
     printf("%d\t%x\n", *p2, p2); 
    } 

Aber wenn ich den Code ausführen alles, was ausgegeben wird, ist 0 an jedem der Speicherplätze. Was mache ich falsch, das verhindert, dass die Werte kopiert werden?

+1

'p' wird nicht inkrementiert. –

+0

Das Problem mit Ihrem Code ist, dass es 'p2' ändert, aber niemals' p' ändert. Wählen, um als Tippfehler zu schließen. – dasblinkenlight

+0

doing p ++ gibt Zufallszahlen gemischt mit einigen Nullen als Ausgabe in den Speicherplätzen – theplaid

Antwort

1

Ihr Problem ist in dieser Schleife, wo Sie von *p zu *p2 Kopieren sind:

for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){ 
    *(p2) = *(p); 
} 

Sie erhöhen p2 aber nie p erhöhen und Sie nie p zurückgesetzt zurück zum Anfang von array zu zeigen. Am Anfang dieser Schleife zeigt auf den Standort genau am Ende von array. Ändern Sie Ihre Schleife zu diesem:

for(p2 = array2, p = array; p2 < array2 + (sizeof(array2)/sizeof(int)) - 1; p2++, ++p){ 
    *(p2) = *(p); 
} 
Verwandte Themen