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語言的泛型編程並不完善,並無足夠的類型檢查,因此很容易出錯。內存

相關文章
相關標籤/搜索