指针函数和函数指针

mac2025-12-23  8

指针函数 本质上是定义了一个返回值为指针的函数 形式为: void* fun(void x) 定义了一个没有返回值(void),参数类型为空(void)的函数 eg : 定义一个指针函数,判断数组中有没有想要的数

#include<stdio.h> #include<stdlib.h> int* FindNum(int arr[], int count, int num) { for (int i = 0; i < count; ++i) { if (arr[i] == num) { return &arr[i]; } } return NULL; } int main() { int arr[5] = { 1, 2, 3, 4, 5 }; //调用函数时函数名小心不要写错;它的返回值是一个指针 int* i = FindNum(arr,sizeof(arr)/sizeof(arr[0]),4); if (i == NULL) { printf("没找到\n"); } else { printf("找到了,地址为%d", i); } system("pause"); return 0; }

函数指针 本质上是定义了一个函数类型的指针,这个指针指向的地址是一个函数,即这个指 针是指向函数的指针 形式为: void (*fun)(void x) 定义了返回值为任意型,要传入的参数是任意型的指向函数地址的指针, 函数名赋给fun进行初始化 eg: 求两个数字相加

#include<stdio.h> #include<stdlib.h> double Add(double x,double y)//定义一个加法函数 { return x + y; } int main() { //int(*fun)(int x,int y); void(*fun)();//这三种都可以 //int (*fun)(int,int) fun = Add;//函数指针初始化 printf("%.2f\n",Add(6.5,7.81)); system("pause"); return 0; }

回调函数 回调函数就是一个通过指针函数调用的函数。其将函数指针作为一个参数,传递给另一个函数。 回调函数并不是由实现方直接调用,而是在特定的事件或条件发生时由另外一方来调用的 eg:main函数调用回调函数CallBack,回调函数调用Add函数,实现加法

#include<stdio.h> #include<stdlib.h> int Add(int x, int y)//定义一个加法函数 { return x + y; } //定义了一个函数指针int (*p)(int x,int y),p指向这个函数的地址 int CallBack(int x,int y,int (*p)(int x, int y))//定义一个回调函数, //返回给main函数值 { return p(x, y);//执行传入的函数,并将其返回值返回给CallBack函数 } int main() { printf("%d+%d=%d\n",22,33,CallBack(22, 33, Add));//调用CallBack函数 system("pause"); //并传递两个加数和要被传入的函数 return 0; }
最新回复(0)