不同的概念
两者都涉及到指针,但的确是不同的概念
函数指针
- 函数指针是一个指向函数的指针,它存储了函数的地址;
- 通过函数指针,可以实现在程序运行时动态地选择调用不同的函数;
- 函数指针通常用于实现回调函数、事件处理和动态、多态性等场景;
给出一个回调函数例子,主功能函数接受另一个回调函数参数:
#include <stdio.h>
// 定义回调函数类型
typedef void (*CallbackFunction)(int);
// 主功能函数,函数体内会调用回调函数
void performOperation(int x, int y, CallbackFunction callback) {
int result = x + y;
callback(result); // 调用回调函数,将结果传递给回调函数
}
// 回调函数,用于处理操作的结果
void printResult(int result) {
printf("The result is: %d\n", result);
}
int main() {
int num1 = 10, num2 = 20;
// 调用 performOperation() 函数,并传递回调函数 printResult()
performOperation(num1, num2, printResult);
return 0;
}
【回调函数】在调用函数执行完特定的任务后,如果满足一定的条件,就会调用传递的回调函数。这种机制使得函数能够灵活地在运行时决定执行哪些操作,从而增强了程序的灵活性和可扩展性。
函数返回一个指针
意味着函数返回的是一个指针,这个指针指向某个内存位置。
- 通常情况下,函数返回的指针指向了函数内部动态分配的内存,或者指向了函数外部的某个对象;
- 通过返回指针,函数可以将一些数据结构、动态分配的内存等信息传递给调用者;
例如数据结构中链表或者树的实现,需要返回一个指向下一个节点的指针:
struct Node {
int data;
struct Node *next;
};
struct Node *createNode(int data) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}