关于泛型:同一个函数可以处理不同类型的数据,这种方法就成为泛型。
这样可以避免相同方法,不同参数代码的冗余。
泛型的方式我了解的有两种:1.使用void来实现泛型 。2.使用宏实现泛型
来上段可视化代码:
void实现
//一般的交换
void swap(int *a, int *b)
{
//这里省略一些参数检查
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
上边代码交换两个整形的值,那如果需要交换一个字符串呢,没办法重新写一个呗。但是有了泛型这个概念,以上问题都不是问题,还好c给我们提供了一个void的类型。
请看:
void swap(void *a, void *b, int n_byte)
{
char tmp[n_byte];
strcpy(tmp, (char *)a);
strcpy((char *)a, (char *)b);
strcpy((char *)b, tmp);
}
使用泛型这种编程方式,我们可以交换一个整形,也可以交换一个字符串
int main()
{
int a = 1;
int b = 2;
printf("before swap:a=%d\n b=%d\n", a, b);
swap((void *)&a, (void *)&b, sizeof(int));
printf("after swap:a=%d b=%d\n", a, b);
char buff[8] = "hello";
char buff1[8] = "world";
printf("before swap:buff = %s buff1 = %s\n", buff, buff1);
swap((void *)buff, (void *)buff1, sizeof(buff));
printf("after swap:buff = %s buff1 = %s\n", buff, buff1);
return 0;
}
结果输出
使用宏来实现:
#define CREATE_ARRAY(ARRAY_NAME, ELE_TYPPE, N_ELE) \
static ELE_TYPE ARRAY_NAME[N_ELE]
CREATE_ARRAY(array, int, 10);
printf("buff size = %d\n", sizeof(array)); //buff size = 10*4;
CREATE_ARRAY(array, char, 10);
printf("buff size = %d\n", sizeof(array)); //buff size = 10*1;
该宏用于创建一个数组