在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
分享到:
相关推荐
函数指针是一种指向函数的指针。例如:int (*p)();,这里declare p as a pointer to a function that returns an int。 六、指针的指针 指针的指针是一种指向其他指针的指针。例如:char argv;,这里declare argv ...
// 使用typedef定义函数指针类型 PTRFUN pFun; // 使用新的函数指针类型定义指针 char glFun(int a) { return 'a'; } void main() { pFun = glFun; // 将glFun函数的地址赋给pFun (*pFun)(2); // 通过函数...
3. **typedef简化函数指针**:为了简化函数指针的使用,可以使用`typedef`创建一个别名,使得声明和使用函数指针更加直观。例如,我们可以定义一个类型`FP`,它代表了某个特定签名的函数指针,然后用这个别名来声明...
定义指向函数的指针时,需要特别注意其语法格式。正确的定义方式是:`int (*fp)(int a);`。这表明`fp`是一个指向接受整型参数并返回整型值的函数的指针。这里的关键在于指针运算符`*`与圆括号`()`的结合顺序,`*`...
下面我们将详细讨论如何定义、赋值、调用指向函数的指针,以及它们在实际编程中的应用。 首先,定义一个指向函数的指针,我们需要指定函数的返回类型和参数列表。例如,如果有一个接受整数参数并返回整数的函数,...
函数指针的类型是指针类型,例如`typedef void (*fp)(int);`,其中`fp`是函数指针的名称,`(*fp)`表示函数指针指向的函数,`(int)`表示函数的参数类型。 在示例代码中,我们定义了一个函数指针`fp`,并将其指向全局...
在使用函数指针时,需要注意的是,函数指针的定义必须与它所指向的函数的原型完全一致。包括返回类型,参数的数量以及参数的类型。只有这样,编译器才能正确地通过函数指针找到并调用相应的函数。 函数指针的理解和...
**函数指针**是指向函数的指针,它存储的是函数的入口地址。使用函数指针可以让我们动态地选择不同的函数来执行,这对于实现回调函数、策略模式等高级设计模式非常有用。 **指针函数**则指的是返回值为指针类型的...
函数指针就是一个指向函数的指针,它存储了函数在内存中的地址。通过函数指针,我们可以在运行时动态地调用不同的函数,这在处理回调函数、算法比较或实现多态性时特别有用。例如,我们可以定义一个函数指针类型,...
#### 利用typedef简化函数指针的定义 为了简化函数指针类型的定义,可以使用`typedef`来创建一个新的类型名。例如: ```c typedef void (*FP)(); // 创建了一个新的类型名FP,表示指向无参无返回值函数的指针类型 ...
`typedef`关键字可以用来简化函数指针的定义。例如,我们可以定义一个新的类型名`fp`来代表特定类型的函数指针: ```cpp typedef int (*fp)(int a); ``` 然后在后续的定义中,可以直接使用`fp`作为函数指针的类型: ...
`typedef` 关键字可以用来定义新的类型别名,使得函数指针的定义更加简洁。例如,`typedef int (*fp)(int a);` 定义了一个名为 `fp` 的类型,代表了接受一个整数参数并返回整数的函数指针。之后,我们可以使用 `fp ...
函数指针是一个指向函数的指针,它可以用来存储函数的地址,以便在程序的运行时调用该函数。声明一个函数指针类型的语法如下: ```c return_type (*pointer_name)(parameter_list); ``` 例如,如果有一个返回整型...
定义函数指针的关键在于其类型必须与所指向的函数签名完全匹配,包括返回类型和参数列表。例如,一个接受两个整数并返回整数的函数指针可以这样定义: ```c int (*func_ptr)(int, int); ``` 然后,我们讨论`extern...
// 类函数指针类型定义 ``` 在上述代码中,`MyClassFuncPtr`是一个指向`MyClass`类中无返回值、接受一个整型参数的成员函数的指针。 接下来,我们可以创建类对象,并通过成员指针来调用函数: ```cpp MyClass ...
函数指针是指向函数的指针变量。它们可以存储函数的地址,并且可以通过这些指针来调用相应的函数。在C++中定义函数指针的一般形式如下: ```cpp 返回类型 (*指针名)(参数列表); ``` 例如,如果我们有一个返回`int`...
在代码中定义一个函数指针,并将其存储在Flash中,可以使用typedef结构体和PROGMEM关键字结合的方式。例如,在文档中提到的代码片段: ```c typedef struct { void(*pFun)(void); } Function; const Function ...
函数指针变量可以指向一个特定类型的函数,当我们通过函数指针调用函数时,就像执行了常规的函数调用一样。函数指针的声明通常包括返回类型、参数列表和函数名前的星号(*),例如: ```c typedef int (*func_ptr)...
本文详细介绍了函数指针的三种主要用法:指向普通函数的指针、函数指针数组以及指向函数指针数组的指针。同时,还简单提及了在C++中函数指针与类成员的关联。 1. 指向普通函数的指针: 在C++中,函数指针的定义...
函数指针本质上是一个指向函数的指针,它可以用来存储函数的地址。在C语言中,每个函数都有一个唯一的地址,我们可以通过定义函数指针类型来引用这个地址。例如,如果你有一个接受两个整数并返回整数的函数,你可以...