MST

星途 面试题库

面试题:C语言回调函数在复杂场景中的应用

在一个模拟的图形绘制系统中,有不同类型的图形(如圆形、矩形),每种图形有自己的绘制函数。请使用C语言回调函数实现一个通用的绘制管理函数`draw_all_shapes`,该函数接收一个图形结构体数组,数组中的每个结构体包含图形类型及对应绘制函数的回调指针,然后通过遍历数组调用相应的绘制函数进行绘制。请给出完整的代码实现,包括结构体定义等。
37.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义圆形绘制函数
void draw_circle() {
    printf("绘制圆形\n");
}

// 定义矩形绘制函数
void draw_rectangle() {
    printf("绘制矩形\n");
}

// 定义图形类型枚举
typedef enum {
    CIRCLE,
    RECTANGLE
} ShapeType;

// 定义绘制函数指针类型
typedef void (*DrawFunction)();

// 定义图形结构体
typedef struct {
    ShapeType type;
    DrawFunction draw;
} Shape;

// 通用的绘制管理函数
void draw_all_shapes(Shape shapes[], int count) {
    for (int i = 0; i < count; i++) {
        switch (shapes[i].type) {
            case CIRCLE:
                shapes[i].draw();
                break;
            case RECTANGLE:
                shapes[i].draw();
                break;
            default:
                break;
        }
    }
}

int main() {
    Shape shapes[] = {
        {CIRCLE, draw_circle},
        {RECTANGLE, draw_rectangle}
    };
    int count = sizeof(shapes) / sizeof(shapes[0]);
    draw_all_shapes(shapes, count);
    return 0;
}