问题由来:
typedef int(*UaBase_ComFunction)(void); UABASE_API(int) UaBase_RegisterComFunction(UaBase_ComFunction a_pFunction); UABASE_API(int) UaBase_UnregisterComFunction(UaBase_ComFunction a_pFunction);typedef int (*UaBase_ComFunction)(void);
上述代码的作用:声明的一个函数指针(函数类型的指针),作为函数形参传入函数,在使用时可以根据不同功能调用不同的函数
这行代码是C/C++中的typedef声明,具体解析如下:
-
typedef:
typedef
是用来创建类型别名或者类型同义词的关键字。 -
int: 这指定了函数指针的返回类型为int。
-
(*UaBase_ComFunction): 这是正在创建的类型别名,表示一个指向没有参数(void)且返回整数(int)的函数指针。名称
UaBase_ComFunction
是正在定义的新类型名称。
因此,这行代码定义了UaBase_ComFunction
作为一个类型。例如,可以声明类型为UaBase_ComFunction
的函数指针,这些指针必须指向符合int function_name(void)
签名的函数。
示例用法:
下面是如何使用UaBase_ComFunction
的示例:
// 定义一个符合签名的函数 int myFunction(void) { return 42; } // 声明一个类型为 UaBase_ComFunction 的函数指针 UaBase_ComFunction ptr; // 将函数指针指向 myFunction ptr = myFunction; // 通过指针调用函数 int result = ptr(); // 这会调用 myFunction,并将其返回值(42)存储在 result 中 总结,typedef int (*UaBase_ComFunction)(void); 定义了UaBase_ComFunction作为一个类型,表示指向返回整数并且没有参数的函数的指针。
1、函数指针(function pointer)和指针函数(pointer to function)区别
两个概念上有所不同的术语:
-
函数指针(function pointer):
- 函数指针是指可以指向函数的指针变量。它存储了函数的地址,允许通过该指针调用相应的函数。
- 在 C/C++ 中,通过函数指针可以实现动态调用不同的函数,使得代码更加灵活和可扩展。
示例:
typedef int (*FuncPtr)(void); // 定义一个函数指针类型 int myFunction(void) { return 42; } FuncPtr ptr = myFunction; // 函数指针指向 myFunction int result = ptr(); // 调用 myFunction,并获得返回值
-
指针函数(pointer to function):
- 指针函数是指返回类型为指针的函数。它是一个函数,其返回值是一个指针,指向某种数据类型。
- 通常指针函数用于返回动态分配的内存或者指向函数的指针。
示例:
int* createIntPointer(void) { int* ptr = (int*)malloc(sizeof(int)); *ptr = 10; return ptr; }
因此,函数指针主要用于存储和调用函数,而指针函数则是返回指针的函数。这两者在语法和用途上有明显的区别,理解它们有助于正确使用和理解 C/C++ 中的函数指针和指针函数。
2、函数指针(function pointer)的应用
函数指针作为函数参数在 C/C++ 中是一种常见且强大的技术,它允许将函数本身作为参数传递给另一个函数,使得函数调用更加灵活和动态。
示例说明:
假设我们有以下几个函数和一个使用函数指针的函数:
#include <stdio.h> // 定义一个函数指针类型 typedef int (*UaBase_ComFunction)(void); // 第一个函数,符合 UaBase_ComFunction 的函数签名 int functionA(void) { return 10; } // 第二个函数,符合 UaBase_ComFunction 的函数签名 int functionB(void) { return 20; } // 接受 UaBase_ComFunction 类型参数的函数 void executeFunction(UaBase_ComFunction func) { int result = func(); // 调用传入的函数指针 printf("Result: %d\n", result); } int main() { // 声明函数指针 UaBase_ComFunction ptrA; UaBase_ComFunction ptrB; // 指向不同的函数 ptrA = functionA; ptrB = functionB; // 通过 executeFunction 函数调用不同的函数 executeFunction(ptrA); // 输出 Result: 10 executeFunction(ptrB); // 输出 Result: 20 return 0; }
解释:
-
typedef 声明:
typedef int (*UaBase_ComFunction)(void);
定义了UaBase_ComFunction
作为函数指针类型,可以指向返回整数并且没有参数的函数。 -
函数 functionA 和 functionB: 这两个函数都符合
UaBase_ComFunction
的函数签名,即返回整数并且没有参数。 -
executeFunction 函数: 这是一个接受
UaBase_ComFunction
类型参数的函数。在executeFunction
中,通过传入的函数指针func
调用不同的函数。 -
在 main 函数中的示例: 在
main
函数中,声明了两个函数指针ptrA
和ptrB
,分别指向functionA
和functionB
。然后通过executeFunction
函数调用这两个不同的函数,输出它们的返回结果。
通过这种方式,函数指针使得代码更加灵活,可以根据需要在运行时决定调用哪个函数,从而增加了程序的可扩展性和可维护性。
标签:函数,int,void,ComFunction,函数指针,UaBase,指针 From: https://www.cnblogs.com/blj28/p/18286170