函數(shù)指針 指針 函數(shù)

指針和函數(shù)的各種結(jié)合,看到都頭疼,以前也看過這方面的,可是不久又忘了,好記性不如賴筆頭,做一下整理。
先讓自己懵逼一下(類型隨意吧)

  • int (*p)(int a,int b)
  • typedef int(*Multi)(int a, int b);
  • int (*)[10] p;
  • int* (*fun1)(char * p1,char * p2);
  • char * *fun2(char * p1,char * p2);
  • char * fun3(char * p1,char * p2);
  • ((void() ())0)();

反正我一眼看著很懵逼 還是慢慢來吧

函數(shù)指針

  • 格式:返回類型(*指針名)(參數(shù))
  • int (*p)(int a,int b) 函數(shù)指針p 指向一個(gè)函數(shù),該函數(shù)返回類型int,該函數(shù)還有兩個(gè)int類型的參數(shù)
    使用方法如下
#include <iostream>
using namespace std;
int add(int x, int y)
{
    return x + y;
}
void print(int(*p)(int x, int y),int a,int b)//將函數(shù)指針作為參數(shù),后面的a,b需要加上,因?yàn)閜中的x,y不可見
{
    cout << "this is a print function,the result is " << p(a, b) << endl;
}

int(*funPoint)(int a, int b);//聲明一個(gè)函數(shù)指針
int _tmain(int argc, _TCHAR* argv[])
{
    funPoint  = add;//funPoint指向add的地址,add后面不能帶參數(shù)
    //下面三種方式等同,結(jié)果一樣
    cout << (*funPoint)(2, 4) << endl;
    cout << funPoint(2,4) << endl;
    cout << add(2, 4) << endl;
    
    //將函數(shù)指針作為參數(shù)
    print(add, 2, 4);//輸出print函數(shù)中的結(jié)果
    return 0;
}

不過這個(gè)函數(shù)指針,在作為別的函數(shù)的參數(shù)時(shí),寫的好麻煩,需要把自己的參數(shù)都帶上,print(int(*p)(int x, int y),int a,int b)能不能簡單點(diǎn),可以用typedef啊

typedef函數(shù)指針

  • 格式:typedef 返回類型 (*函數(shù)指針名)(參數(shù))
  • typedef int(*p)(int a, int b) 這樣就可以將p 作為一個(gè)類型來看待了
    實(shí)現(xiàn)如下:
#include <iostream>
using namespace std;
typedef int(*Multi)(int a, int b);//這樣寫就可以將函數(shù)指針作為一個(gè)類型了

int mul(int x, int y)
{
    return x*y;
}
void show(Multi a, int x, int y)//將函數(shù)指針作為參數(shù),省了不少事
{
    cout << "this is a Multi function, the result is " << a(x, y) << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
    Multi a = mul;//如果沒有加typedef,只能寫成:Multi = mul
    //以下三種方式一樣
    cout << mul(2, 4) << endl;
    cout << a(2, 4) << endl;
    cout << (*a)(2, 4) << endl;
    
    //將函數(shù)指針作為參數(shù)
    show(a, 2, 4);
    return 0;
}

后幾個(gè)類型,參考一個(gè)這個(gè)博客:c語言函數(shù)指針的理解與使用 寫的很詳細(xì)了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容