C++編程中的函數指針初步解析。本站提示廣大學習愛好者:(C++編程中的函數指針初步解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C++編程中的函數指針初步解析正文
1.界說
每個函數都占用一段內存單位,它們有一個肇端地址,指向函數進口地址的指針稱為函數指針。
2.語法
指向函數的指針變量的普通界說情勢為:
數據類型 (*指針變量名)(參數表);
3.解釋
1) 函數指針的界說情勢中的數據類型是指函數的前往值的類型。
2) 辨別上面兩個語句:
int (*p)(int a, int b); //p是一個指向函數的指針變量,所指函數的前往值類型為整型
int *p(int a, int b); //p是函數名,此函數的前往值類型為整型指針
3) 指向函數的指針變量不是固定指向哪個函數的,而只是表現界說了一個如許類型的變量,它是專門用來寄存函數的進口地址的;在法式中把哪個函數的地址賦給它,它就指向哪個函數。
4) 在給函數指針變量賦值時,只需給出函數名,而不用給出參數。
如函數max的原型為:int max(int x, int y); 指針p的界說為:int (*p)(int a, int b); 則p = max;的感化是將函數max的進口地址賦給指針變量p。這時候,p就是指向函數max的指針變量,也就是p和max都指向函數的開首。
5) 在一個法式中,指針變量p可以前後指向分歧的函數,但一個函數不克不及賦給一個紛歧致的函數指針(即不克不及讓一個函數指針指向與其類型紛歧致的函數)。
若有以下的函數:
int fn1(int x, int y); int fn2(int x);
界說以下的函數指針:
int (*p1)(int a, int b); int (*p2)(int a);
則
p1 = fn1; //准確 p2 = fn2; //准確 p1 = fn2; //發生編譯毛病
6) 界說了一個函數指針並讓它指向了一個函數後,對函數的挪用可以經由過程函數名挪用,也能夠經由過程函數指針挪用(即用指向函數的指針變量挪用)。
如語句:c = (*p)(a, b); //表現挪用由p指向的函數(max),實參為a,b,函數挪用停止後獲得的函數值賦給c。
7) 函數指針只能指向函數的進口處,而弗成能指向函數中央的某一條指令。不克不及用*(p+1)來表現函數的下一條指令。
8) 函數指針變量經常使用的用處之一是把指針作為參數傳遞到其他函數。
4.舉例
// MethodPoint.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> using namespace std; typedef int (*pf)(const int& a,const int& b); int sum(const int& a,const int& b){ return a + b; } int minus(const int& a,const int& b){ return a - b; } int doSometing(const int& a,const int& b, pf p){ return p(a, b); } int _tmain(int argc, _TCHAR* argv[]) { cout << doSometing(1, 2, &sum) << endl; cout << doSometing(1, 2, &minus) << endl; system("pause"); return 0; }
成果: