C语言的泛型

关于泛型:同一个函数可以处理不同类型的数据,这种方法就成为泛型。

这样可以避免相同方法,不同参数代码的冗余。

泛型的方式我了解的有两种: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;

该宏用于创建一个数组

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值