C语言的函数指针

C语言的函数指针_第1张图片

一、怎样定义函数指针变量?

下面的语句,定义一个函数指针fnPtr:

int (*fnPtr) (void);

这与函数定义行相似,但有两点不同:

1 加了星号,说明是指针

2 指针名连同星号外面加了圆括号

这两点把它与函数定义行区分开来。

与函数定义行相同的是返回类型有函数参数,这两者写法一致。

二、怎样将函数指针赋给函数指针变量?

首先,函数需要先定义。

前面的例子中,如果事先定义了一个函数

lookup:

int lookup (void);

我们就可以执行下面的语句:

fnPtr = lookup;

这个语句将lookup的指针赋给fnPtr.

也可以写成

fnPtr = &lookup;

但是用不着。

三、怎样用函数指针变量调用函数?

如果函数指针变量指向了一个特定的函数,则可以用它来调用这个函数。

在上面的例子中,fnPtr已经指向了函数lookup,所以,下面的语句就调用函数lookup:

entry = fnPtr ();

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

两者的功能一样。

四、函数指针变量的用处

1 将函数指针变量作函数的参数。

2 将函数指针放进数组中。

下面举qsort函数的例子,它有个函数指针参数:

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

#include

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");

}

你可能感兴趣的:(C语言的函数指针)