Otrzymujesz metodę zamiany, która akceptuje dwa wskaźnikii wykonuje zamianę między nimi.
Metoda jest wywołana w następujący sposób: void* left = new int[0]; void* right = new int [0]; swap(left, right);
Po takim wykonaniu lewy powinien wskazywać na poprzedni adres prawego i odwrotnie. Ale... coś jest nie tak. Czy możesz naprawić metodę, aby faktycznie zamieniła wskaźniki?
Verified answer
W C można to zrobić tak:
#include <stdio.h>
void swap(void** left, void** right) {
void* temp = *right;
*right = *left;
*left = temp;
}
int main() {
void* x = (void*)(0xBEEF);
void* y = (void*)(0xFEED);
printf("%p %p\n", x, y); // 000000000000beef 000000000000feed
swap(&x, &y);
printf("%p %p\n", x, y); // 000000000000feed 000000000000beef
}
W C++ można nawet łatwiej
void swap(void*& left, void*& right) {
void* temp = right;
right = left;
left = temp;
}