c語言函式指標的定義形式:返回型別 (*函式指標名稱)(引數型別,引數型別,引數型別,…);
c++函式指標的定義形式:返回型別 (類名稱::*函式成員名稱)(引數型別,引數型別,引數型別,….);
c語言函式指標使用舉例:
#include
#include
int fun1()
printf("this is fun1 call\n");
return 1;
void fun2(int k, char c)
printf("this is fun2 call:%d %c\n", k, c);
int main()
int (*pfun1)() = null;
void (*pfun2)(int, char) = null;
int a,b;
pfun1 = fun1; //第一種賦值方法
a= pfun1(); //第一種呼叫方法(推薦)
printf("%d\n",a);
b= (*pfun1)();//第二種呼叫方法
printf("%d\n",b);
pfun2 = &fun2;//第二種賦值方法(推薦,因為和其他資料指標賦值方法一致)
pfun2(1,'a');
(*pfun2)(2,'b');
return 0;
c++函式指標使用舉例:
#include
using namespace std;
class test
public:
test()
cout<<"constructor"cout<<"this is fun1 call:"void fun2(double d)const
cout<<"this is fun2 call:"cout<<"this is fun3 call:"int main()
// 類的靜態成員函式指標和c的指標的用法相同
double (*pstatic)(char buf) = null;//不需要加類名
pstatic = test::fun3; //可以不加取位址符號
pstatic("myclaa");
pstatic = &test::fun3;
(*pstatic)("xyz");
//普通成員函式
int (test::*pfun)(int, char) = null; //一定要加類名
pfun = &test::fun1; //一定要加取位址符號
test mytest;
(mytest.*pfun)(1, 'a'); //呼叫是一定要加類的物件名和*符號
//const 函式(基本普通成員函式相同)
void (test::*pconst)(double)const = null; //一定要加const
pconst = &test::fun2;
test mytest2;
(mytest2.*pconst)(3.33);
// //建構函式或者析構函式的指標,貌似不可以,不知道c++標準有沒有規定不能有指向這兩者的函式指標
// (test::*pcon)() = null;
// pcon = &test.test;
// test mytest3;
// (mytest3.*pcon)();
return 0;
函式指標作為函式引數:
#include
#include
void fun(int k, char c)
printf("this is fun2 call:%d %c\n", k, c);
void fun1(void (*pfun)(int, char), int a,char c)
pfun(a, c);
int main()
fun1(fun, 1, 'a');
return 0;
// c++ 的形式差不多
函式指標作為函式返回值:
// c 形式
#include
#include
void fun(int k, char c)
printf("this is fun2 call:%d %c\n", k, c);
//fun1 函式的引數為double,返回值為函式指標void(*)(int,char)
void (*fun1(double d))(int, char)
printf("%f\n",d);
return fun;
int main()
void (*p)(int, char) = fun1(3.33);
p(1, 'a');
return 0;
//c++ 形式
#include
using namespace std;
class test
public:
int fun(int a, char c)
cout<<"this is fun call:"class test2
public:
// test2 的成員函式fun1,引數是double,
//返回值是test的成員函式指標int(test::*)(int, char)
int (test::*fun1(double d))(int, char)
coutint main()
test mytest;
test2 mytest2;
int (test::*p)(int, char) = mytest2.fun1(3.33);
(mytest.*p)(1, 'a');
return 0;
函式指標陣列:
#include
#include
float add(float a,float b)
float minu(float a,float b)
int main()
//定義乙個函式指標陣列,大小為2
//裡面存放float (*)(float, float)型別的指標
float (*pfunarry[2])(float, float) = ;
double k = pfunarry[0](3.33,2.22);// 呼叫
printf("%f\n", k);
k= pfunarry[1](3.33,2.22);
printf("%f\n", k);
return 0;
//c++ 可模擬
typedef 簡化函式指標型別:
#include
#include
float add(float a,float b)
printf("%f\n",a+b);
return a+b;
float minu(float a,float b)
printf("%f\n",a-b);
return a-b;
//用pfuntype 來表示float(*)(float,float)
typedef float(*pfuntype)(float, float);
int main()
pfuntype p = &add;//定義函式指標變數
p(3.33, 2.22);
pfuntype parry[2] = ;//定義函式指標陣列
parry[1](3.33, 2.22);
//函式指標作為引數可以定義為:void fun(pfuntype p)
//函式指標作為返回值可以定義為:pfuntype fun();
return 0;
//c++ 可模擬
文章**
函式指標的用法 C
typedef函式指標的用法 c 簡化,促進跨平台開發的目的.typedef 行為有點像 define 巨集,用其實際型別替代同義字。不同點 typedef 在編譯時被解釋,因此讓編譯器來應付超越預處理器能力的文字替換。用法一 typedef int myfun int,int 這種用法一般用在給函...
c語言函式指標的用法
隨說做了有一段時間的c了,但盡然沒有搞明白函式指標的用法,見到了也沒有好好研究,今天終於有時間了,在網上搜了一下,終於弄懂了.原來就是定義了乙個指標變數,只不過形式有點怪罷了.其實還是當成指標用就行了 一般有兩種用法 1定義函式指標 int functionpoint int,int 這只是定義了乙...
typedef函式指標的用法 C
簡化 促進跨平台開發的目的.typedef 行為有點像 define 巨集,用其實際型別替代同義字。不同點 typedef 在編譯時被解釋 因此讓編譯器來應付超越預處理器能力的文字替換 用法一 typedef int myfun int,int 這種用法一般用在給函式定義別名 的時候上面的例子定義m...