J'ai une fonction d'échange comme ceci:en utilisant le pointeur vide dans la fonction de permutation
void swap(int i, int j, void* arr[])
{
void *temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
j'appelle swap principal comme ceci:
main()
{
int arr[8] = {4,7,9,2,6,7,8,1};
void *ptr = arr;
swap(0, 1, ptr);
int k;
for (k=0; k<8; k++)
printf("%d ", arr[k]);
}
Maintenant, l'échange semble fonctionner correctement, mais au lieu de permuter une valeur avec une autre, il échange deux valeurs avec deux autres valeurs. Par exemple, quand je fais swap (0, 1, PTR), je reçois le tableau
9,2,4,7,6,7,8,1
quand je devrais obtenir:
7,4,9,2,6,7,8,1
Au lieu d'échanger 4 et 7, il est la permutation 4 , 7 avec 9,2. Pourquoi ça fait ça?
il semble que vous êtes sur un système 64 bits qui vous donne 64 bits par défaut, essayez un printf sizeof arr [0] et sizeof int pour vérifier, vous pouvez passer un paramètre supplémentaire pour la taille et utiliser un tampon char [taille] avec memcpy ou simplement utiliser un échange xor si vous vérifiez qu'ils sont des adresses différentes (en d'autres termes ne pas échanger 1 et 1) – technosaurus