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);
}