Другие языки программирования и технологии

Напишите пожалуйста функцию обмена значений двух переменных на си (не c++) для любого типа данных

если переменные передаются в формате void*. Шаблоны и перегрузку нельзя использовать. Заранее спасибо!  
NB
Nasimi Behbudov
193
Ннасяльника сказай функсию, атнака...

#include <stdio.h>
#include <limits.h>
void uswap(void*, void*, size_t);
int main() {
    unsigned int a = UINT_MAX, b = 5;
    printf("%u %u\n", a, b);
    uswap(&a, &b, sizeof(unsigned int));
    printf("%u %u\n", a, b);
    getchar();
}
void uswap(void* a, void* b, size_t size) {
    char ch;
    short sh;
    long lg;
    double db;
    switch (size) {
    case 1:
        ch = *(char*)a;
        *(char*)a = *(char*)b;
        *(char*)b = ch;
        break;
    case 2:
        sh = *(short*)a;
        *(short*)a = *(short*)b;
        *(short*)b = sh;
        break;
    case 4:
        lg = *(long*)a;
        *(long*)a = *(long*)b;
        *(long*)b = lg;
        break;
    case 8:
        db = *(double*)a;
        *(double*)a = *(double*)b;
        *(double*)b = db;
        break;
    }
}
П К
П К
51 769
Лучший ответ
Baysangur! Baysangur! как ты замутил отступы?
Если указателям можно менять адрес
void obm(void* x, void* y)
{

void *p;

p = x;

x = y;

y = p;

}

иначе надо передать длину типа как параметр и обмен вести побайтно.
Азамат Койшибаев void* - указатель на любую структуру, но через него нельзя обращаться к полям?
Сишник? откуда вас понабралось? Держи макрос:

#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)
Atreyo 8-)
Atreyo 8-)
3 734
void - пустой тип данных, что там Вы обменивать собрались?
P.S. Я долго не спал, забыл, что значит указатель void, поправьте меня инапомните пожалуйста, тк тут что-то не просто так, что указатель типа void. Не помню, что это значит.