Sto provando a scambiare gli oggetti per un problema di compiti a casa che utilizza i puntatori void per scambiare gli oggetti. La dichiarazione di mia funzione deve essere:Scambio di oggetti usando i puntatori
void swap(void *a, void *b, size_t size);
non sto cercando il codice esatto come farlo così posso capirlo da solo, ma non sono sicuro se ho capito bene. Ho riscontrato che un problema è il seguente:
void *temp;
temp = a;
a = b;
b = temp;
modifica solo ciò a cui puntano i puntatori. È corretto? Se è corretto, perché lo scambio di puntatori non cambia effettivamente il contenuto tra * a e * b. Perché se il tuo puntatore punta a qualcosa di diverso, non potresti dereferenziarlo e gli oggetti ora sarebbero diversi?
Allo stesso modo, solo il passaggio dei valori come:
void *temp;
*temp = *a;
*a = *b;
*b = *temp;
non è corretto o, che io non so perché. Perché di nuovo, mi sembra che il contenuto sia cambiato.
Scambiare oggetti significa scambiare completamente la memoria e il valore di ciò a cui punta un puntatore?
Quindi sembra che devo usare malloc per allocare abbastanza spazio per il mio scambio. Se alloco abbastanza memoria per un oggetto, supponendo che abbiano le stesse dimensioni, non vedo davvero come sia diverso dagli altri due metodi sopra.
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???
Grazie!
Stai vicino. Tuttavia, il differimento di un 'void *' non è permesso. Pensa ad altri modi in cui potresti spostare le informazioni, in particolare pensa al parametro 'size' e all'effetto che ha sul tuo algoritmo. –
Cambiare i puntatori è un bel tentativo, ma non funzionerà perché sono stati passati per valore. Pertanto, il chiamante avrà lo stesso valore nei puntatori prima della chiamata. –