C語言的函數(shù)指針

一、怎樣定義函數(shù)指針變量?

下面的語句,定義一個(gè)函數(shù)指針fnPtr:

int (*fnPtr) (void);

這與函數(shù)定義行相似,但有兩點(diǎn)不同:

1 加了星號(hào),說明是指針

2 指針名連同星號(hào)外面加了圓括號(hào)

這兩點(diǎn)把它與函數(shù)定義行區(qū)分開來。

與函數(shù)定義行相同的是返回類型有函數(shù)參數(shù),這兩者寫法一致。

二、怎樣將函數(shù)指針賦給函數(shù)指針變量?

首先,函數(shù)需要先定義。

前面的例子中,如果事先定義了一個(gè)函數(shù)

lookup:

int lookup (void);

我們就可以執(zhí)行下面的語句:

fnPtr = lookup;

這個(gè)語句將lookup的指針賦給fnPtr.

也可以寫成

fnPtr = &lookup;

但是用不著。

三、怎樣用函數(shù)指針變量調(diào)用函數(shù)?

如果函數(shù)指針變量指向了一個(gè)特定的函數(shù),則可以用它來調(diào)用這個(gè)函數(shù)。

在上面的例子中,fnPtr已經(jīng)指向了函數(shù)lookup,所以,下面的語句就調(diào)用函數(shù)lookup:

entry = fnPtr ();

也可以用:Entry = (*fnPtr) ()

兩者的功能一樣。

四、函數(shù)指針變量的用處

1 將函數(shù)指針變量作函數(shù)的參數(shù)。

2 將函數(shù)指針放進(jìn)數(shù)組中。

下面舉qsort函數(shù)的例子,它有個(gè)函數(shù)指針參數(shù):

void qsort (arr, n, size, comp_fn)

原型:void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

使用它的示例程序:

#include <stdio.h>

#include <stdlib.h>

int comp_ints_asc (void *p1, void *p2)

{

? ? int i1 = * (int *) p1;

? ? int i2 = * (int *) p2;

? ? return i1 - i2;

}

int comp_ints_des (void *p1, void *p2)

{

? ? int i1 = * (int *) p1;

? ? int i2 = * (int *) p2;

? ? return i2 - i1;

}

int main (void)

{

? ? int comp_ints (void *, void *);

? ? int data[10]={8,7,-3,-1,9,6,8,7,3,1};

? ? int i;

? ? qsort (data, 10, sizeof(int), comp_ints_asc);

? ? for (i=0;i<10;i++){

? ? ? ? printf("%i ",data[i]);

? ? }

? ? printf("\n\n");

? ? qsort (data, 10, sizeof(int), comp_ints_des);

? ? for (i=0;i<10;i++){

? ? ? ? printf("%i ",data[i]);

? ? }

? ? printf("\n");

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容