C语言的泛型编程

本文有更新,请移步个人我的博客:https://blog.andyqiao.top/article/13/编程

 

1 问题引入

  首先引入一个问题,实现一个泛型的swap函数,分别使用C++和C实现。函数

2 C++的泛型

  C++有良好的泛型编程机制,因此我很快就写出了C++版的泛型swap函数。spa

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

3 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);
}

4 总结

  运用必定的技巧,C语言也能够实现必定功能的泛型编程,但编程的时候必定要多加当心,C语言的泛型编程并不完善,并无足够的类型检查,因此很容易出错。内存

相关文章
相关标签/搜索