C 函式指標的用法

2021-07-24 09:40:33 字數 3860 閱讀 7406

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...