目录
函数指针和指针函数的定义
函数指针
一个指向函数的指针,该函数有一个整型参数并返回一个整型数,
int(*a)(int)
指针类型标识符(*返回名称)(所接收函数的返回类型)
必须要确保所接收的函数返回类型和实际函数返回的类型对应。
函数指针的本质是指针,是指向函数的指针变量,因而其本身先是指针变量,只不过这个指针变量指向的内容为一个函数。当这个指针指向函数之后,就可以用这个指针去调用函数了,就想是指针调用其他变量一样。
指针函数
一个函数的返回值是一个指针:
返回类型标识符 *返回名称(形式参数表){函数体}
float *find(float *p, int x) {return p+x}
示例
#include <stdio.h>
#include <iostream>
using namespace std;
int max(int x, int y)
{
return (x > y ? x : y);
};
float *find(float* y, int x)
{
return y + x;
};
int main()
{
//指针函数的用法
float score[] = {5,2,3,4};
float *q = find(score+1, 1); //指针函数
printf("*q = %f\n", *q); //注意此处的float类型,不是int,所以应该是%f.
//cout << *q << endl;
//函数指针的用法
int a;
int(*p)(int, int);//定义一个函数指针
p = max; //将函数指针与指针函数进行绑定
a = (*p)(1, 2);
printf("a=%d\n",a);
system("pause");
return 0;
}
运行结果:
用typedef来完成函数指针的定义
下面用typedef来定义一个函数指针:
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
typedef int(*pfun)(int x, int y);//定义一个名为pfun的函数指针
//int fun(int x, int y);//声明一下fun函数,直接把函数定义部分的头给放到这儿也行
int fun(int, int); //这种方式的声明不容易混淆
pfun p = fun;//将函数指针与定义的函数绑定
int ret = p(2, 3);//用函数指针去调用这个函数
printf("ret:%d\n", ret);
system("pause");
return 0;
}
int fun(int x, int y)//定义一个函数
{
return x + y;
}
运行结果: