MST

星途 面试题库

面试题:C语言中函数指针与回调机制在排序算法中的应用

在C语言中,qsort函数使用了函数指针作为回调机制来实现通用的排序功能。请你编写一个使用qsort函数对整数数组进行降序排序的程序,并解释其中函数指针和回调机制是如何工作的。
47.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

// 比较函数,用于qsort实现降序排序
int compare(const void *a, const void *b) {
    return (*(int *)b - *(int *)a);
}

int main() {
    int arr[] = {5, 2, 9, 1, 5, 6};
    int n = sizeof(arr) / sizeof(arr[0]);

    // 使用qsort进行降序排序
    qsort(arr, n, sizeof(int), compare);

    // 输出排序后的数组
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

函数指针和回调机制的工作原理

  1. 函数指针:在C语言中,函数指针是一种指向函数的指针变量。qsort函数的原型为void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)),其中compar就是一个函数指针。它指向一个比较函数,该函数用于决定两个元素的顺序。
  2. 回调机制qsort函数在排序过程中,需要比较数组中的元素。它并不会直接知道如何比较具体类型的元素,而是通过调用传递进来的比较函数(即回调函数)来进行比较。在上述代码中,compare函数就是回调函数。qsort函数在需要比较两个元素时,会调用compare函数,并把指向这两个元素的指针作为参数传递给它。compare函数根据具体需求(这里是降序排序)比较这两个元素,并返回一个整数值来指示它们的顺序。qsort函数根据这个返回值来决定如何交换元素,从而实现排序。