C/C++

Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!

Короче, я в шоке.
Препод просит у племяша, чтобы он без применения ООП, на простом Си написал функцию swap(), которая обменивает значения двух переменных одного типа. Но чтобы тип переменных можно было выбирать любой.
Как это можно сделать на обычном Си, не на C++???
#include<stdio.h>
#define swap(type, a, b) type tmp = a; a = b; b = tmp

int main()
{

float fa = 3.6, fb = 7.4;

swap(float, fa, fb);

printf("\n fa=%.1f, fb=%.1f",fa,fb);

system("pause");//для Винды

return 0;
}
Валентин Есиков
Валентин Есиков
37 945
Лучший ответ
Алексей Танцюра int a[10] = {1}, b[10] = {2};

Что произойдёт при выполнении swap(a, b, int[10])?
В C нет ООП - от слова "совсем". Так что на C без ООП - оксюморон.

Шаблоны - НЕ ООП. Так что на шаблонах C++ без ООП:

template<typename T> void swap(T &a, T &b) {
T t(a);
a = b;
b = t;
}

Вариант на чистом C, похожий на предложенный Аглаей Шниц, но более эффективный, т.к. без использования кучи:

void swap(void *a, void *b, size_t size) {
char t[size];
memcpy(t, a, size);
memcpy(a, b, size);
memcpy(b, t, size);
}

Объём данных ограничен размером стека.
Дмитрий Хнычев Ему Си нужен.
наверно, как-то так:
https://rextester.com/WKJ3599
А зачем племяш Ваш полез в такое учебное заведение? Не может - значит не судьба, пусть идёт в ДРУГУЮ ПРОФЕССИЮ.
Абдулла Онорбоев шарит он нормально, но не всё знает
да и не все всё знают в таком возрасте
Можно свапнуть побайтно, представив входящие данные как некие массивы
void swap(void* a, void* b, int lenght)
{
char* aa = (char*) a;
char* bb = (char*) b;
char temp;
for (int i = 0; i < lenght; i++)
{
temp = aa[i];
aa[i] = bb[i];
bb[i] = temp;
}
}


В программе функция имеет вид
double f=45.4, d = 11.0;
swap(&f, &d, sizeof(f));
Haci Tahir Abbasli
Haci Tahir Abbasli
51 416
В ШОКЕ не надо быть. Надо быть не ДАУНОМ, как вы и ваш племяш. В полне обычное требование без ООП С, где здесь ШОК? Не шарите, так не лезьте и голову покрасьте в красный цвет.