新知识——函数指针

      正常情况下,指针指向的是整型,字符,数组等;而函数指针也一样,是指向函数的指针变量。

      因此函数指针本质上还是指针,只不过指向的对象从我们常见的数组等变成了函数

表示方法

  • int add(int x);               //定义
  • typedef int (*Node)(int);           //指针       //类型名:Node
  • Node m=add;                 //赋值
  • 运用指针函数时,需要保证指针的格式和函数的格式一样,才能调用
  • (比如:函数是int A(int a,int b);则指针为typedef int (*Node)(int ,int);     函数是int A(int a);则指针为typedef int (*Node)(int ,);)

如下代码所示:

#include<iostream>
using namespace std;

int add(int a, int b)
{
	a += b;
	return a;
}

int dele(int a, int b)
{
	a -= b;
	return a;
}


int main()
{
	typedef int(*Node)(int, int);           
	Node bb = add;                         //第一种
	cout << bb(1, 2) << endl;
	
	Node cc = dele;                        //第二种
	cout << cc(1, 2) << endl;
	system("pause");
	return 0;
}

上面通过定义,指针分别指向了两个函数,add和dele,则此时指针便可替代函数,直接使用。

再看指针函数数组

#include<iostream>
using namespace std;

int add1(int a, int b)           //加法
{
	a += b;
	return a;
}

int add2(int a, int b)            //减法
{
	a -= b;
	return a;
}

int add3(int a, int b)             //乘法
{
	a = a*b;
	return a;
}

int add4(int a, int b)             //除法
{
	a = a/b;
	return a;
}

int main()
{
	typedef int(*Node)(int, int);

	Node ff[]{add1,add2,add3,add4};             //函数指针数组

	for (int i = 0; i < sizeof(ff) / sizeof(ff[0]); i++)
	{
		cout << ff[i](1,2)<<endl;
	}
	system("pause");
	return 0;
}

上面定义了四个结构相似的函数,然后定义一个函数指针数组来保存四种函数。

然后通过数组中的四次调用得到最终函数指针结果;

猜你喜欢

转载自blog.csdn.net/qq_46423166/article/details/106629318