`

typedef定义指向函数的指针

    博客分类:
  • C++
阅读更多
在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗?

int (*s_calc_func(char op))(int, int);

如果不知道,请看下面的程序,里面有比较详细的说明

1.typedef int (*FP_CALC)(int, int); 

// 我先不介绍,大家能看懂下一行的内容吗?


2.int (*s_calc_func(char op))(int, int);


// 定义一个函数calc_func,它根据操作字符 op 返回指向相应的计算函数的指针
//将其分解

3.FP_CALC calc_func(char op);


// 根据 op 返回相应的计算结果值

int calc(int a, int b, char op);

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



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



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



int div(int a, int b)
{
   return b? a/b : -1;
}
// 这个函数的用途与下一个函数作业和调用方式的完全相同,

// 参数为op,而不是最后的两个整形

int (*s_calc_func(char op)) (int, int)
{

     return calc_func(op);
}


FP_CALC calc_func(char op)
{
  switch (op)
   {



     case '+': return add;



     case '-': return sub;



     case '*': return mul;



     case '/': return div;



     default:

         return NULL;

    }

     return NULL;

}



int calc(int a, int b, char op)

{



     FP_CALC fp = calc_func(op); // 下面是类似的直接定义指向函数指针变量



        // 下面这行是不用typedef,来实现指向函数的指针的例子,麻烦!



         int (*s_fp)(int, int) = s_calc_func(op);



         // 可以断言这俩是相等的



     if (fp) return fp(a, b);



     else return -1;



}



 



void test_fun()



{



     int a = 100, b = 20;



     printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));



     printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));



     printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));



     printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));







运行结果



    calc(100, 20, +) = 120



    calc(100, 20, -) = 80



    calc(100, 20, *) = 2000



    calc(100, 20, /) = 5
分享到:
评论

相关推荐

    理解复杂的CC++声明 const, typedef , 函数指针

    函数指针是一种指向函数的指针。例如:int (*p)();,这里declare p as a pointer to a function that returns an int。 六、指针的指针 指针的指针是一种指向其他指针的指针。例如:char argv;,这里declare argv ...

    关于C++中函数指针的使用(包含对typedef的分析).txt

    // 使用typedef定义函数指针类型 PTRFUN pFun; // 使用新的函数指针类型定义指针 char glFun(int a) { return 'a'; } void main() { pFun = glFun; // 将glFun函数的地址赋给pFun (*pFun)(2); // 通过函数...

    函数指针就是指向函数的指针;类成员方法指针,类具有类域操作符

    3. **typedef简化函数指针**:为了简化函数指针的使用,可以使用`typedef`创建一个别名,使得声明和使用函数指针更加直观。例如,我们可以定义一个类型`FP`,它代表了某个特定签名的函数指针,然后用这个别名来声明...

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

    定义指向函数的指针时,需要特别注意其语法格式。正确的定义方式是:`int (*fp)(int a);`。这表明`fp`是一个指向接受整型参数并返回整型值的函数的指针。这里的关键在于指针运算符`*`与圆括号`()`的结合顺序,`*`...

    c++中指向函数的指针

    下面我们将详细讨论如何定义、赋值、调用指向函数的指针,以及它们在实际编程中的应用。 首先,定义一个指向函数的指针,我们需要指定函数的返回类型和参数列表。例如,如果有一个接受整数参数并返回整数的函数,...

    函数指针和函数对象

    函数指针的类型是指针类型,例如`typedef void (*fp)(int);`,其中`fp`是函数指针的名称,`(*fp)`表示函数指针指向的函数,`(int)`表示函数的参数类型。 在示例代码中,我们定义了一个函数指针`fp`,并将其指向全局...

    c++函数指针

    在使用函数指针时,需要注意的是,函数指针的定义必须与它所指向的函数的原型完全一致。包括返回类型,参数的数量以及参数的类型。只有这样,编译器才能正确地通过函数指针找到并调用相应的函数。 函数指针的理解和...

    函数指针定义

    **函数指针**是指向函数的指针,它存储的是函数的入口地址。使用函数指针可以让我们动态地选择不同的函数来执行,这对于实现回调函数、策略模式等高级设计模式非常有用。 **指针函数**则指的是返回值为指针类型的...

    函数指针与指针函数应用程序

    函数指针就是一个指向函数的指针,它存储了函数在内存中的地址。通过函数指针,我们可以在运行时动态地调用不同的函数,这在处理回调函数、算法比较或实现多态性时特别有用。例如,我们可以定义一个函数指针类型,...

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

    #### 利用typedef简化函数指针的定义 为了简化函数指针类型的定义,可以使用`typedef`来创建一个新的类型名。例如: ```c typedef void (*FP)(); // 创建了一个新的类型名FP,表示指向无参无返回值函数的指针类型 ...

    C++中函数指针的含义

    `typedef`关键字可以用来简化函数指针的定义。例如,我们可以定义一个新的类型名`fp`来代表特定类型的函数指针: ```cpp typedef int (*fp)(int a); ``` 然后在后续的定义中,可以直接使用`fp`作为函数指针的类型: ...

    指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针 CC++中函数指针的含义

    `typedef` 关键字可以用来定义新的类型别名,使得函数指针的定义更加简洁。例如,`typedef int (*fp)(int a);` 定义了一个名为 `fp` 的类型,代表了接受一个整数参数并返回整数的函数指针。之后,我们可以使用 `fp ...

    函数指针查表用法 - 副本.zip

    函数指针是一个指向函数的指针,它可以用来存储函数的地址,以便在程序的运行时调用该函数。声明一个函数指针类型的语法如下: ```c return_type (*pointer_name)(parameter_list); ``` 例如,如果有一个返回整型...

    函数指针_extern_typedef_const_static的基本用法

    定义函数指针的关键在于其类型必须与所指向的函数签名完全匹配,包括返回类型和参数列表。例如,一个接受两个整数并返回整数的函数指针可以这样定义: ```c int (*func_ptr)(int, int); ``` 然后,我们讨论`extern...

    vc++类函数指针的应用

    // 类函数指针类型定义 ``` 在上述代码中,`MyClassFuncPtr`是一个指向`MyClass`类中无返回值、接受一个整型参数的成员函数的指针。 接下来,我们可以创建类对象,并通过成员指针来调用函数: ```cpp MyClass ...

    c++函数数组指针的使用方法

    函数指针是指向函数的指针变量。它们可以存储函数的地址,并且可以通过这些指针来调用相应的函数。在C++中定义函数指针的一般形式如下: ```cpp 返回类型 (*指针名)(参数列表); ``` 例如,如果我们有一个返回`int`...

    AVR-GCC如何调用存储于Flash中的指向函数的指针

    在代码中定义一个函数指针,并将其存储在Flash中,可以使用typedef结构体和PROGMEM关键字结合的方式。例如,在文档中提到的代码片段: ```c typedef struct { void(*pFun)(void); } Function; const Function ...

    函数指针,动态链接库

    函数指针变量可以指向一个特定类型的函数,当我们通过函数指针调用函数时,就像执行了常规的函数调用一样。函数指针的声明通常包括返回类型、参数列表和函数名前的星号(*),例如: ```c typedef int (*func_ptr)...

    函数指针详解 word文档讲解详细 很细

    本文详细介绍了函数指针的三种主要用法:指向普通函数的指针、函数指针数组以及指向函数指针数组的指针。同时,还简单提及了在C++中函数指针与类成员的关联。 1. 指向普通函数的指针: 在C++中,函数指针的定义...

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

    函数指针本质上是一个指向函数的指针,它可以用来存储函数的地址。在C语言中,每个函数都有一个唯一的地址,我们可以通过定义函数指针类型来引用这个地址。例如,如果你有一个接受两个整数并返回整数的函数,你可以...

Global site tag (gtag.js) - Google Analytics