Βρήκα στο νετ το παρακάτω καταπληκτικό macro που δείχνει να κάνει swap ΟΤΙΔΗΠΟΤΕ ! Δεν μετακινεί δείκτες, αντιγράφει απευθείας τα περιεχόμενα των μεταβλητών x και y, ότι και να είναι: απλές μεταβλητές, δείκτες, struct, πίνακες, τα πάντα!
Το καλείτε απλά με το όνομα των 2 μεταβλητών, χωρίς & μπροστά. Με ότι κι αν το δοκίμασα μέχρι στιγμής, δείχνει να μη "μασάει" πουθενά. Από άποψη ταχύτητας βέβαια δεν είναι optimal, αλλά είναι φοβερή φάση!
- Κώδικας: Επιλογή όλων
#define swap(x,y) do {\
unsigned char swap_temp[sizeof(x) == sizeof(y) ? (signed)sizeof(x) : -1];\
memcpy( swap_temp, &(y), sizeof(x) );\
memcpy( &(y), &(x), sizeof(x) );\
memcpy( &(x), swap_temp, sizeof(x) );\
} while(0)