`
tcspecial
  • 浏览: 907996 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C void* 函数指针

阅读更多

   函数指针能够很方处理重复性工作,简化代码逻辑. 在C语言函数指针一般用于回调,传递函数名, 当数据回来时,执行函数指针所指向函数.

   下面看函数指针在计算器程序的经典运用:

  

int add(int a,int b)
{
	 return a+b;
}

int minus(int a,int b)
{
	return a-b;
}

int multiply(int a,int b)
{
	return a*b;
}

int devide(int a,int b)
{
	Q_ASSERT(b!=0);
	return a/b;
}      

 

 

  四个函数在形式上结构一致,只是函数名不同而已,我们可以用函数指针提炼其共性:

 

  

// 阶乘运算,只提供一个参数
int factorial(int a)
{
	if(a==1)
	return 1;
	
	return a*factorial(a-1);
}

  

 

  调用: cacl(10,5,add),动态执行相应的函数,从而达到面向对象式的设计方式 

  函数指针的使用三个步骤: 1.声明: typedef int (*FUNC)(int,int);

                                           2.赋值,让函数指针指向所要执行的函数: FUNC fun=devide;

                                           3.传递参数并调用: fun(12,11)

 

  对于上述函数只能传递同一种类型的函数指针,如果我现在增加一个新的函数(参数不一致),则上述函数又无法被调用了. 在这里我们就可以用void*万能指针来描述这个问题了.

 

  

//定义阶乘运算的函数指针
typedef int (*FAC)(int);

// 通用函数
int calc(int a,int b=-1,void *fun)
{
   if(b==-1)
   {
       return ((FAC)fun)(a); //执行强制转换
   }else
   {
       return ((FAC)fun)(a,b);
   }
}

calc(2,3,minus);  // c++下对函数指针要求比较严格,不能将void*转化为void (*)()

 

  

  

分享到:
评论

相关推荐

    C语言void及void指针深层探索

    在C语言中,`void`关键字具有特殊的意义,主要用于指示“无类型”或“空类型”,尤其在函数声明、参数列表以及指针类型中扮演着重要角色。下面我们将深入探讨`void`关键字及其与`void`指针的相关知识点。 #### `...

    C语言指针函数和函数指针详细介绍.

    C语言指针函数和函数指针详细介绍 C语言中指针函数和函数指针是两个不同的概念,但它们之间存在着紧密的联系。本文将对C语言中的指针函数和函数指针进行详细的介绍。 一、指针函数 指针函数是指返回值为指针的...

    void及void指针含义的深刻解析

    - **内存管理函数**:`malloc`, `calloc`, `realloc` 和 `free` 等内存管理函数经常返回 `void *` 类型的指针,以便它们能够适应任何类型的数据。 ```c++ void *ptr = malloc(sizeof(int)); int *p = (int *)ptr...

    C语言void及void指针深层探索.doc

    C 语言 void 及 void 指针深层探索 C 语言中的 void 关键字和 void 指针类型是初学者容易混淆和误解的概念,本文将对 void 关键字的深刻含义进行解说,并详述 void 及 void 指针类型的使用方法与技巧。 void 的...

    C语言中关于函数指针的用法

    ### C语言中关于函数指针的用法 在C语言中,函数指针是一种非常强大的特性,它允许程序员将函数当作参数传递给其他函数或在运行时决定调用哪个函数,这种灵活性对于实现某些高级算法(如排序算法中的比较函数)至关...

    void指针void指针void指针void指针

    在C语言中,`void`指针是一种特殊类型的指针,它不指向任何特定类型的变量或数据结构。`void`指针的主要用途在于其灵活性,可以用来存储任何类型的数据地址,并且在进行类型转换时不需要显式地进行类型转换。这种...

    函数指针的详解

    ### 函数指针详解 ...函数指针是C语言中一个重要的概念,它提供了更大的灵活性和扩展性,使得程序员可以编写更加高效和模块化的代码。正确理解和掌握函数指针的使用对于提高编程水平具有重要意义。

    函数指针和指针函数

    例如,`void (*func)()` 是一个无参数且无返回值的函数指针。在给定的示例中: ```c int (*ptr)(int, int); ``` 定义了一个名为`ptr`的函数指针,它可以指向一个接受两个整型参数并返回整型值的函数。然后,我们...

    c语言指针总结 函数指针 指针函数

    ### C语言指针详解:函数指针与指针函数 #### 第十章 指针 **一、指针的基本概念** 指针是C语言中一个非常重要的概念,它允许程序员直接操纵内存地址,这对于提高程序效率至关重要。理解指针的基础概念是学好...

    void指针小结

    在C/C++编程语言中,`void`关键字及其关联的`void`指针类型常常让初学者感到困惑。由于对其概念理解不深,导致在实践中出现各种错误。本文旨在深入探讨`void`关键字的含义及其在编程实践中的应用,特别是`void`指针...

    动态数组实现(所有代码均使用C语言回调函数实现及存储数据均使用void*、void**实现)

    rar文件包含:Vector.h、Vector.c、main.c。主要实现自主定义回调函数结合及其在动态数组功能中的使用实例。存储数据使用void*、void**,其中包括结构体数据结构。主要功能有初始化动态数组、释放动态数组、尾插法、...

    C语言函数指针与指针函数训练.zip

    在C语言中,函数指针和指针函数是高级特性,它们在编程中扮演着重要角色,尤其是在处理回调函数、动态调度以及实现元编程等方面。本训练将深入讲解这两个概念,帮助你掌握其核心概念和实际应用。 首先,我们要了解...

    C_Pointer.rar_函数指针

    在C语言中,函数指针是一个非常重要的概念,它允许我们用指针来存储函数的地址,进而可以像操作普通变量一样操作函数。这为我们的编程提供了极大的灵活性和效率,尤其是在处理回调函数、动态调用以及算法实现等方面...

    指向函数的指针的用法.rar_c 指针_c语言指针_指针

    - C语言的`qsort()`函数就是一个很好的例子,它接受一个比较函数指针作为参数,用于排序数组。 8. **注意事项** - 不同类型的函数不能赋值给同一个函数指针,因为它们的地址不同。 - 避免空悬指针,确保函数指针...

    双链表实现(所有代码均使用C语言回调函数实现及存储数据均使用void*、void**实现)

    rar文件包含:DoubleList.h、DoubleList.c、main.c。主要实现自主定义回调函数结合及其在双链表功能中的使用实例。存储数据使用void*、void**,其中包括结构体数据结构。主要功能有初始化双链表、释放双链表、尾插法...

    函数指针和woid指针详解.docx

    函数指针是C语言中的一种特殊的指针类型,它指向一个函数的入口地址。函数指针可以用来调用函数,並且可以作为函数的参数传递给其他函数。 函数指针的定义格式为:typedef 返回值类型 (*指针变量名)(参数类型列表)...

    有关C/C++的函数指针概念课件仅供学习使用

    在学习C/C++编程语言的过程中,函数指针是高级编程技巧之一,它允许将函数作为参数传递给其他函数,或者在运行时动态决定调用哪个函数。函数指针本身是指向函数入口地址的指针,每个函数都有一个入口地址,这个地址...

    C/C++ 函数指针的意义,函数指针的用法

    ### C/C++ 函数指针的意义与应用 在C/C++编程中,函数指针是一种高级特性,它允许程序员处理函数的方式如同处理变量一般灵活。理解函数指针的意义及其用法,对于提升代码的可扩展性和灵活性至关重要。 #### 1. ...

    C语言回调函数

    此外,还定义了一个名为 `speak` 的函数原型,它接受两个参数:一个是 `callback_t` 类型的函数指针,另一个是 `void*` 类型的数据指针。 ```c typedef void(*callback_t)(void*); void speak(callback_t, void*...

Global site tag (gtag.js) - Google Analytics