C语言函数指针与指针函数
C语言函数指针与指针函数
简介:
函数指针与指针函数是两个不同的东西。
函数指针是指向一个函数的指针变量,该指针存储的是所指向函数的内存地址。函数指针可以被当做参数传递,也可以在C语言接口体中实现接口的功能,定义而不实现。
与函数指针相似的是一个名叫“指针函数”概念。指针函数是指返回值为指针的函数。指针函数可以赋值给函数指针。
函数指针
函数指针的定义:
函数指针是指一个指向函数的指针变量。定义如下
int (*p)(int x, int y);
并且函数指针可用做结构体成员
typedef struct MyStruct
{
int (*add)(int x,int y)
};
函数指针还可以存进数组,或者自定义数据结构中。
void t1(){cout<<"test1"<<endl;}
void t2(){cout<<"test2"<<endl;}
void t3(){cout<<"test3"<<endl;}
int main(int argc, const char * argv[])
{
typedef void (*fp)(void);
fp b[] = {t1,t2,t3}; // b[] 为一个指向函数的指针数组
b[0](); // 利用指向函数的指针数组进行下标操作就可以进行函数的间接调用了
return 0;
}
函数指针的调用
函数指针的调用十分简单。
一般情况下的调用如下:
#include<stdio.h>
#include<malloc.h>
typedef struct MyStruct
{
int a;
int (*add)(int x, int y);//在结构体中定义函数指针
}MyStruct;
int add(int x, int y) {
printf("%d", x + y);
return x + y;
}
void pr() {
printf("yes");
}
MyStruct* addP(int a,int b) { //指针函数
MyStruct* ans = (MyStruct*)malloc(sizeof(MyStruct));
ans->a = a + b;
return ans;
}
int main() {
int (*fun0)(int x, int y); //定义一个函数指针变量
void (*fun1)();
MyStruct* (*fun2)(int x,int y);
fun0 = add; //通过函数名赋值给函数指针
fun1 = pr;
fun2 = addP;
fun0(1,2); //调用函数一样,调用函数指针
fun1();
printf("fun2:%d", (fun2(1, 2))->a);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!