2020-04-01 |

函数指针作为参数

使用函数指针的另一种方法是将其作为参数传递给另一个函数。

用作参数的函数指针有时被称为回调函数,因为接收函数“将其回调”。

stdlib.h头文件中的qsort()函数使用此技术。

快速排序是一种广泛使用的数组排序算法。要在程序中实现排序,只需包含stdlib.h文件,然后编写与qsort中使用的声明匹配的比较函数:

    void qsort(void *base, size_t num, size_t width, int (*compare)(const void *, const void *)) 

要分解qsort声明:

void*base 将指向数组的void指针

size_t num数组中的元素数。

size_t width元素的大小。

int(*compare(const void*,const void*)具有两个参数的函数指针,当参数具有相同的值时返回0;当arg1小于arg2返回-1;当arg1大于arg2返回1。

比较函数的实际实现取决于您。它甚至不需要名字“比较”。您可以指定从高到低或从低到高的排序,或者如果数组包含结构元素,则可以比较成员值。

以下程序使用qsort将一个int数组从低到高排序:

#include <stdio.h>
#include <stdlib.h>

int compare (const void *, const void *); 

int main() {
    int arr[5] = {52, 23, 56, 19, 4};
    int num, width, i;
    
    num = sizeof(arr)/sizeof(arr[0]);
    width = sizeof(arr[0]);
    qsort((void *)arr, num, width, compare);
    for (i = 0; i < 5; i++)
    printf("%d ", arr[ i ]);
    
    return 0;
}

int compare (const void *elem1, const void *elem2) {
    if ((*(int *)elem1) == (*(int *)elem2))
    return 0;
    else if ((*(int *)elem1) < (*(int *)elem2))
    return -1;
    else
    return 1;
}

我们在qsort调用中使用函数名,因为函数名充当指针。

0

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论