新知識——函數指針

      正常情況下,指針指向的是整型,字符,數組等;而函數指針也一樣,是指向函數的指針變量。

      因此函數指針本質上還是指針,只不過指向的對象從我們常見的數組等變成了函數

表示方法

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

上面定義了四個結構相似的函數,然後定義一個函數指針數組來保存四種函數。

然後通過數組中的四次調用得到最終函數指針結果;

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章