天天看點

函數指針和指針函數

一、函數指針與指針函數

函數指針和指針函數
函數指針和指針函數

說明:

函數指針,即其本質是一個指針,它是一個指向函數的指針變量。

指針函數,即其本質是一個函數,傳回的是某一類型的指針。

值得注意的是:max函數的入口位址類型應該為:(int*)(int,int)。

輸出結果:

函數指針和指針函數

二、定義如下幾種類型變量

1、含有10個元素的指針數組

int *a[10];

2、數組指針

int *a=new int[10];

3、函數指針

void (*fn)(int,int);

4、指向函數的指針數組

int (*fnarray[10])(int,int);

三、函數指針數組

函數指針和指針函數
函數指針和指針函數

第5、6行,聲明兩個函數,有兩個int型形參,傳回值為int型。

第12行,定義一個函數指針數組,數組有兩個元素,都是函數指針,指向一個有兩個int型形參,傳回值為int型的函數。

第13、14行,數組的第一個指針op[0],指向add1函數入口,數組的第二個指針op[1],指向add2函數入口。

第15、16行,c++形式輸出,需要注意的是*op[0]需要加括号,表示一個函數指針,才能正确輸出,否則編譯出錯。

第17、18行,c形式輸出。

四、typedef用于函數指針定義

如下面程式:

typedef int(*pfun)(int x,int y);    //定義了pfun類型,表示一個函數指針

int fun(int x,int y);               //聲明一個函數

pfun p = fun;        //定義一個pfun類型的函數指針p,并賦予了函數fun的入口位址,注意,這裡p前面沒有*

int ret = p(2,3);    //利用p調用fun函數,注意,這裡p前面沒有*