Ich muss eine Funktion schreiben, die eine tiefe Kopie eines Arrays von Ganzzahlen macht, mit nur Zeigerarithmetik (dh kann Array-Element-Syntax wie orig [i] nicht verwenden).Tiefe Kopie eines Arrays von ganzen Zahlen, nur mit Zeigerarithmetik
Das erste Argument ist das Array zu kopieren, und seine Länge wird durch das zweite Argument angegeben. Hier
ist das, was ich bisher:
int* copyArray(const int *orig, int size) {
int *copy = malloc(size * sizeof *copy);
int **toReturn = ©
for (int i = 0; i < size; i++, orig++, copy++) {
*copy = *orig;
}
return *toReturn;
}
int main() {
int testArray[3] = {1, 2, 3};
int *testptr = testArray;
int *copied = copyArray(testptr, 3);
for (int i = 0; i < 3; i++) {
printf("%d %p", testArray[i], &testArray[i]);
printf("\n");
}
printf("\n");
for (int i = 0; i < 3; i++) {
printf("%d %p", copied[i], &copied[i]);
printf("\n");
}
return 0;
}
Dies ist nicht mir, die richtigen Ergebnisse zu erzielen ... Das Ergebnis, das ich von diesem erhalten ist:
1 0x7ffce0ff6fd0
2 0x7ffce0ff6fd4
3 0x7ffce0ff6fd8
0 0xe1301c
0 0xe13020
0 0xe13024
während es sein sollte sein:
1 0x7ffce0ff6fd0
2 0x7ffce0ff6fd4
3 0x7ffce0ff6fd8
1 0xe1301c
2 0xe13020
3 0xe13024
ich auf Zeiger und Speicherzuweisung bin neu ... Was mache ich falsch?
UPDATE: Problem behoben!
Schauen Sie sich meine Antwort an, oder die anderen Antworten, die auch funktionieren.
Sie Inkrementieren 'copy', so dass, wenn Sie es zurück, es zeigt auf das Ende des Arrays. Außerdem weisen Sie nur 3 Byte Speicher zu; es sollte 'malloc (Größe * Größe von * Kopie)' sein. Drittes Problem gefunden: benutze 'size' in der for-Schleife in' copyArray() ', nicht' 3'. – potrzebie
Dank @ potrzebie! Ich habe die von Ihnen empfohlenen Änderungen vorgenommen ... aber ich bekomme immer noch das gleiche Ergebnis. Ich bin mir nicht sicher, ob ich die richtige Änderung an der Return-Anweisung vorgenommen habe. Bitte guck dir das an! AKTUALISIERT. – RockAndaHardPlace
@RockAndaHardPlace Sie können die Zeile 'copy ++' nicht verwenden. Das ändert den Wert, den Sie zurückgeben. Der Wert von 'copy', den Sie von' malloc' erhalten, muss * unverändert * von Ihrer 'copyArray' Funktion zurückgegeben werden. –