Ich versuche, Objekte für ein Hausaufgabe-Problem zu vertauschen, die Void-Zeiger verwendet, um Objekte zu tauschen. Die Erklärung meiner Funktion muss sein:Austauschen von Objekten mithilfe von Zeigern
void swap(void *a, void *b, size_t size);
Ich bin nicht für den genauen Code suchen, wie es zu tun, so kann ich es selbst herausfinden, aber ich bin nicht sicher, ob ich es richtig verstehen. Ich habe festgestellt, dass ein Problem dabei besteht:
void *temp;
temp = a;
a = b;
b = temp;
ändert nur, worauf die Zeiger zeigen. Ist das korrekt? Wenn es richtig ist, warum ändert der Zeiger nicht wirklich den Inhalt zwischen * a und * b. Denn wenn Ihr Zeiger auf etwas anderes zeigt, könnten Sie das nicht dereferenzieren und die Objekte wären jetzt anders?
ähnlich Schalen nur die Werte wie:
void *temp;
*temp = *a;
*a = *b;
*b = *temp;
Ist auch nicht richtig, was ich bin nicht sicher, warum. Denn wieder scheint mir der Inhalt vertauscht zu sein.
Bedeutet das Tauschen von Objekten das vollständige Austauschen von Speicher und den Wert dessen, auf was ein Zeiger zeigt?
So scheint es, dass ich malloc verwenden muss, um genügend Platz für meinen Swap zuzuweisen. Wenn ich genug Speicher für ein Objekt zugebe, unter der Annahme, dass sie die gleiche Größe haben, sehe ich nicht wirklich, wie es sich von den anderen beiden oben genannten Methoden unterscheidet.
void *temp = malloc(sizeof(pa));
// check for null pointer
temp = a;
// do something I'm not sure of since I don't quite get how allocating space is any
// different than the two above methods???
Vielen Dank!
Sie nah dran sind. Die Angabe eines 'void *' ist jedoch nicht erlaubt. Denken Sie über andere Möglichkeiten nach, wie Sie die Informationen verschieben können, denken Sie insbesondere an den Parameter "Größe" und welche Auswirkungen dies auf Ihren Algorithmus hat. –
Das Ändern der Zeiger ist ein schöner Versuch, aber wird nicht funktionieren, weil sie nach Wert übergeben wurden. Somit hat der Anrufer den gleichen Wert in den Zeigern, bevor der Anruf getätigt wurde. –