zamiana wartosci dowolnego typu zmiennych c

0

Witam, mam problem w wydawało by sie latwa funckja i nie moge wpasc na jej rozwiazanie: otoz funkcja ma posiadac dwa argumenty ktyruch wartosci zamieni jak np:

    void zamiana(int *a,int * b){
    int *tmp=*a;
    *a=*b;
    *b=*tmp;
    
}

tylko ze ta funkcja zamienia wartosci typu int a potrzebuje takiej ktora zamieni 2 podstawowe dowone typy np float i float char* i char* itd
moze kod ktory nie dziala(bo nie ma takiego prawa) bardziej zobrazuje to co chcialem przekazac w slowach:

 
int main()
{
(...)
    char *s="Pierwszy";
    char *c="Drugi";
    float q=3.14,w=21.8363;
    char e=65,r='z';
    int t=15,y=22;
    double u=123.45, i=13.59;
    printf("przed:\t\t%f %f\t%c %c\t%d %d\t%f %f\t%s %s\n",q,w,e,r,t,y,u,i,s,c);
    swap(&s,&c);
    swap(&q,&w);
    swap(&e,&r);
    printf("zamiana:\t%f %f\t%c %c\t%d %d\t%f %f\t%s %s\n",q,w,e,r,t,y,u,i,s,c);
    
(...)
}
void swap(void *a, void *b){
	printf("%f %f\n",a,b);
	int *tmp= a;
	a=b;
	b=*tmp;
}
3
#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)

1 użytkowników online, w tym zalogowanych: 0, gości: 1