J'essaie d'échanger des objets pour un problème de devoirs qui utilise des pointeurs vides pour permuter des objets. La déclaration de ma fonction doit être:Permutation d'objets à l'aide de pointeurs
void swap(void *a, void *b, size_t size);
Je ne cherche pas le code exact comment le faire, je peux le comprendre par moi-même, mais je ne suis pas sûr si je comprends bien. J'ai trouvé qu'un problème est en faisant:
void *temp;
temp = a;
a = b;
b = temp;
ne change que ce que les pointeurs pointent vers. Est-ce exact? Si c'est correct, pourquoi les pointeurs d'échange ne changent-ils pas le contenu entre * a et * b? Parce que si votre pointeur pointe vers quelque chose de différent, ne pourriez-vous pas le déréférencer et les objets seraient maintenant différents?
De même, commutant les valeurs comme:
void *temp;
*temp = *a;
*a = *b;
*b = *temp;
n'est pas correct non plus, que je ne sais pas pourquoi. Car encore une fois, il me semble que le contenu est basculé. Est-ce que les objets échangés signifient un échange complet de la mémoire et la valeur de ce vers quoi pointe un pointeur?
Donc il me semble que je dois utiliser malloc pour allouer assez d'espace pour mon swap. Si j'attribue assez de mémoire pour un objet, en supposant qu'ils ont la même taille, je ne vois pas vraiment en quoi il est différent des deux autres méthodes ci-dessus.
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???
Merci!
Vous êtes proche. Déférer un 'void *' n'est pas autorisé cependant. Pensez à d'autres façons de déplacer l'information, en particulier au paramètre 'size' et à l'effet que cela a sur votre algorithme. –
Modifier les pointeurs est un bon essai, mais ne fonctionnera pas car ils ont été passés en valeur. Ainsi, l'appelant aura la même valeur dans les pointeurs avant l'appel. –