目 录CONTENT

文章目录

C语言——函数指针、指针函数、回调函数

smallkun
2024-05-18 / 0 评论 / 0 点赞 / 238 阅读 / 1,388 字
温馨提示:
本文最后更新于 2024-07-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
  1. 函数指针示例:
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    // 声明函数指针
    int (*ptr_add)(int, int);

    // 将 add 函数的地址赋值给函数指针
    ptr_add = add;

    // 通过函数指针调用函数
    int result = ptr_add(5, 3);
    printf("Result: %d\n", result); // 输出: Result: 8

    return 0;
}
  1. 指针函数示例:
#include <stdio.h>
#include <stdlib.h>

int* allocate_array(int size) {
    // 动态分配内存并返回指针
    return (int*)malloc(size * sizeof(int));
}

int main() {
    // 调用指针函数获取动态分配的数组
    int* arr = allocate_array(5);

    // 使用动态分配的数组
    for (int i = 0; i < 5; i++) {
        arr[i] = i * 2;
        printf("%d ", arr[i]);
    }
    printf("\n"); // 输出: 0 2 4 6 8

    // 释放动态分配的内存
    free(arr);

    return 0;
}
  1. 回调函数示例:
#include <stdio.h>

// 回调函数的类型定义
typedef int (*CompareFn)(int, int);

// 使用回调函数的排序函数
void sort_array(int arr[], int size, CompareFn compare_fn) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (compare_fn(arr[j], arr[j+1]) > 0) {
                // 使用回调函数比较元素大小
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

// 升序比较函数
int compare_ascending(int a, int b) {
    return a - b;
}

// 降序比较函数
int compare_descending(int a, int b) {
    return b - a;
}

int main() {
    int numbers[] = {5, 2, 8, 1, 9};
    int size = sizeof(numbers) / sizeof(numbers[0]);

    printf("Ascending sort:\n");
    sort_array(numbers, size, compare_ascending);
    for (int i = 0; i < size; i++) {
        printf("%d ", numbers[i]); // 输出: 1 2 5 8 9
    }
    printf("\n");

    printf("Descending sort:\n");
    sort_array(numbers, size, compare_descending);
    for (int i = 0; i < size; i++) {
        printf("%d ", numbers[i]); // 输出: 9 8 5 2 1
    }
    printf("\n");

    return 0;
}
0

评论区