函数指针
***首先要明确函数名就是一个地址***
- 定义
函数指针变量的定义依赖于该变量要指向的函数定义。
一般形式为:
*返回值类型 (变量名)(参数列表)
(这里的小括号不能缺,缺的话就变成了返回值为 指针的函数了)
例子:
//被指向的函数:
int add(int x,int y);
//函数指向上面的函数:
int (* addfuncptr)(int x,int y);
2.初始化函数指针
有两种方法:
a.使用”取址“ 操作符。
b.使用隐含赋值。
例子:
#include<stdio.h>
void fun1(int n)
{
printf("fun1\n");
}
int * fun2(int x,int y)//只是为了说明
{
int *z;
z=NULL;
printf("fun2\n");
return z;
}
int main()
{
int *t;
int (*pfun1)(int );//函数指针变量指向函数 ”fun1"
int *(int pfun2)(int ,int);//函数指针变量指向函数 “fun2"
pfun2=&fun2;//第一种方法
pfun1=fun1;//第二种方法
return 0;
}
3.调用指针函数
也是有两种方式:
a.隐式调用。
b.显式调用。
例子:
#include<stdio.h>
void fun1(int n)
{
printf("fun1\n");
}
int * fun2(int x,int y)//只是为了说明
{
int *z;
z=NULL;
printf("fun2\n");
return z;
}
int main()
{
int *t;
int (*pfun1)(int );//函数指针变量指向函数 ”fun1"
int *(int pfun2)(int ,int);//函数指针变量指向函数 “fun2"
pfun2=&fun2;
pfun1=fun1;
t=pfun2(10,20);//隐式调用
(*)pfun1(10);//显式调用
return 0;
}
例子:
#include<iostream>
using namespace std;
//template <typename T=int>
int n=0;
void fn1()
{
int n = 0;
n++;
}
void fn2()
{
n++;//n<int>++;
}
void ans(int x)
{
void (*ptr)();//函数指针的声明
if (x == 0)
{
ptr = fn1;//对指针赋值
//或 ptr=&fn1;
ptr();//调用
}
else if (x == 1)
{
ptr = fn2;
ptr();
}
else if (x == 2)
cout << n << endl;
}
int main()
{
int t;
while (cin >> t)
{
n = 0;
while (t--)
{
int x;
cin >> x;
ans(x);
}
}
return 0;
}
希望对大家有帮助!!!