本文有更新,请移步个人我的博客:https://blog.andyqiao.top/article/13/编程
首先引入一个问题,实现一个泛型的swap函数,分别使用C++和C实现。函数
C++有良好的泛型编程机制,因此我很快就写出了C++版的泛型swap函数。spa
template<typename T> void MySwap(T &a, T &b) { T c = a; a = b; b = c; }
个人第一想法是既然不能直接交换变量(类型不知道),那就交换指针呀。下一瞬间,我就很想给本身一巴掌!是左值吗你就交换指针?Stupid!指针
那就多传入一个参数喽,把大小传进去吧,而后咱们直接根据大小来交换内存好了。好想法:blog
void MySwapC(void* a, void *b, int size) { void *p = (void*)malloc(size); assert(p != NULL); memcpy(p, a, size); memcpy(a, b, size); memcpy(b, p, size); }
运用必定的技巧,C语言也能够实现必定功能的泛型编程,但编程的时候必定要多加当心,C语言的泛型编程并不完善,并无足够的类型检查,因此很容易出错。内存