MST
星途 面试题库

面试题:C语言数组指针与函数指针的复杂应用

编写一个C程序,定义一个函数指针数组,数组中的每个函数指针指向一个函数,这些函数实现对一个整数数组的不同操作(例如排序、查找最大值、查找最小值)。通过用户输入选择调用不同的函数,并传入一个动态分配的整数数组进行操作。要求全面考虑内存管理、函数指针的正确使用以及数组的传递和操作。
11.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

// 函数声明
void sortArray(int *arr, int size);
int findMax(int *arr, int size);
int findMin(int *arr, int size);

// 函数指针数组类型定义
typedef void (*VoidFuncPtr)(int *, int);
typedef int (*IntFuncPtr)(int *, int);

int main() {
    int size, choice;
    int *arr;

    // 获取数组大小
    printf("请输入数组大小: ");
    scanf("%d", &size);

    // 动态分配数组内存
    arr = (int *)malloc(size * sizeof(int));
    if (arr == NULL) {
        perror("内存分配失败");
        return 1;
    }

    // 获取数组元素
    printf("请输入 %d 个整数:\n", size);
    for (int i = 0; i < size; i++) {
        scanf("%d", &arr[i]);
    }

    // 函数指针数组
    VoidFuncPtr voidFuncs[] = {sortArray};
    IntFuncPtr intFuncs[] = {findMax, findMin};

    // 打印操作选项
    printf("请选择操作:\n");
    printf("1. 排序数组\n");
    printf("2. 查找最大值\n");
    printf("3. 查找最小值\n");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            voidFuncs[0](arr, size);
            printf("排序后的数组: ");
            for (int i = 0; i < size; i++) {
                printf("%d ", arr[i]);
            }
            printf("\n");
            break;
        case 2:
            printf("最大值是: %d\n", intFuncs[0](arr, size));
            break;
        case 3:
            printf("最小值是: %d\n", intFuncs[1](arr, size));
            break;
        default:
            printf("无效的选择\n");
    }

    // 释放内存
    free(arr);

    return 0;
}

// 排序函数实现
void sortArray(int *arr, int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

// 查找最大值函数实现
int findMax(int *arr, int size) {
    int max = arr[0];
    for (int i = 1; i < size; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}

// 查找最小值函数实现
int findMin(int *arr, int size) {
    int min = arr[0];
    for (int i = 1; i < size; i++) {
        if (arr[i] < min) {
            min = arr[i];
        }
    }
    return min;
}