C语言中通过函数指针达成函数重载
发布时间:2021-11-23 12:17:39 所属栏目:PHP教程 来源:互联网
导读:我们都知道重载是c++面向对象的特性。C语言中是不存在的。所谓重载简单来说就是一个函数名可以实现不同的功能,要么输入参数不同或者参数个数不同,要么返回类型不同。例如函数add(),在c++中可以轻易实现int,double等不同类型参数的相加功能,而在c语言中却
我们都知道重载是c++面向对象的特性。C语言中是不存在的。所谓重载简单来说就是一个函数名可以实现不同的功能,要么输入参数不同或者参数个数不同,要么返回类型不同。例如函数add(),在c++中可以轻易实现int,double等不同类型参数的相加功能,而在c语言中却不能这样实现。c语言中实现重载功能,或者准确来说是类似重载的功能,可以通过函数指针的方式来实现。 下面为演示代码: typedef struct _int_param { int param1; int param2; }INT_PARAM; typedef struct _double_param_ { double param1; double param2; }DOUBLE_PARAM; typedef void* (*ADDFUNC)(void*); void* int_add_func(void* wParam) { INT_PARAM* lParam = (INT_PARAM*)wParam; int res = lParam->param1 + lParam->param2; return (void*)&res; } void* double_add_func(void* wParam) { DOUBLE_PARAM* lParam = (DOUBLE_PARAM*)wParam; double res = lParam->param1 + lParam->param2; return (void*)&res; } void* add_func(ADDFUNC f, void* wParam) { return f(wParam); } int test() { INT_PARAM val1 = {10, 20}; DOUBLE_PARAM val2 = {30.5, 40.5}; void* res1 = add_func(int_add_func, &val1); int result1 = *((int*)res1); void* res2 = add_func(double_add_func, &val2); double result2 = *((double*)res2); return 0; } 其实欲实现类似C++中的函数重载,在C中常常将参数类型加到函数名当中,如add_int,add_float等等。 ![]() (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |