Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Há algum tempo criei esta função, que troca os valores de quaisquer dois objetos de mesmo tipo. A função deve receber como argumentos os endereços dos dois objetos e o tamanho do tipo deles.
#include <stdlib.h>
#include <stdio.h>
void swap(char a, char b, int size)
{
char swapbuff[size], *byte = a;
int i;
for (i = 0; i < size; i++)
swapbuff[i] = *byte++;
*a = *b;
byte = b;
for (i = 0; i < size; i++)
*byte++ = swapbuff[i];
}
int main(void)
{
int um = 1, zero = 0;
swap((char *) &um, (char *) &zero, sizeof (int));
printf("\n\tum: %d\n\tzero: %d", um, zero);
return 0;
}
Se acharem que o código fica muito poluído, podem usar uma macro para simplificar:
#include <stdlib.h>
#include <stdio.h>
#define inverter(X, Y) swap((char ) &X, (char ) &Y, sizeof X)
void swap(char a, char b, int size)
{
char swapbuff[size], *byte = a;
int i;
for (i = 0; i < size; i++)
swapbuff[i] = *byte++;
*a = *b;
byte = b;
for (i = 0; i < size; i++)
*byte++ = swapbuff[i];
}
int main(void)
{
int um = 1, zero = 0;
inverter(um, zero);
printf("\n\tum: %d\n\tzero: %d", um, zero);
return 0;
}Carregando comentários...