C++ 指針函數、函數指針、回調函數

函數指針

指向函數的指針變量,即重點是一個指針。一種特殊的指針,它指向函數的入口;
要聲明指向特定類型的函數指針,能夠首先編寫這個函數的原型,而後用(*p)來替換函數名,這樣p就是這類函數的指針。ios

//格式:類型說明符 (*函數名)(參數)
 int (*f) (int x);

指向函數的指針包含了函數的地址,能夠經過它來調用函數,其實這裏不能稱爲函數名,應該叫作指針的變量名。這個特殊的指針指向一個返回整型值的函數實現地址。指針的聲明筆削和它指向函數的聲明保持一致。函數

#include <iostream>

/*
* 定義一個函數指針p,只能指向返回值爲int,形參爲兩個int的函數
*/
int(*p)(int, int);

/*
* 求最大值
* 返回值是int類型,返回兩個整數中較大的一個
*/
int max(int a, int b) {
    return a > b ? a : b;
}

/*
* 求最小值
* 返回值是int類型,返回兩個整數中較小的一個
*/
int min(int a, int b) {
    return a < b ? a : b;
}

int main(){
    p = max; // 函數指針f指向求最大值的函數max  
    int c = (*p)(1, 2);
    std::cout << c << std::endl;

    //p = min; // 函數指針f指向求最小值的函數min  
    //c = (*f)(1, 2);
    //std::cout << c << std::endl;
}

指針函數

就是指針的函數,表示是一個函數,函數返回類型是某一類型的指針
返回指針的函數,一個函數,它的返回值是指針;指針

//格式:類型標識符 *函數名(參數表)
int  *f(x,y);
#include <iostream>

/*
* 指針函數的定義
* 返回值是指針類型int *
*/
int *f(int a, int b) {
    int *p = (int *)malloc(sizeof(int));
    memset(p, 0, sizeof(int));
    *p = a + b;
    return p;
}

int main(){
    int *p1 = NULL;
    p1 = f(1, 2);

    std::cout << *p1 << std::endl;
}

回調函數

注意:回調函數要麼是全局函數,要麼是靜態函數!code

相關文章
相關標籤/搜索