回调函数C++,C语言

C++

当我们需要在程序中使用回调函数时,我们需要定义一个函数指针类型,然后将回调函数的地址赋值给该函数指针,最后在需要调用回调函数的地方通过该函数指针调用回调函数。

以下是一个简单的示例,其中定义了一个函数指针类型CallbackFunc,并在main函数中将回调函数callback的地址赋值给该函数指针,最后在doSomething函数中通过该函数指针调用回调函数。

#include <iostream>

typedef void (*CallbackFunc)(int);

void callback(int value) {
    std::cout << "Callback function called with value: " << value << std::endl;
}

void doSomething(CallbackFunc callbackFunc) {
    std::cout << "Doing something..." << std::endl;
    callbackFunc(42);
}

int main() {
    CallbackFunc callbackPtr = callback;
    doSomething(callbackPtr);
    return 0;
}

在上述示例中,CallbackFunc是一个函数指针类型,它接受一个int类型的参数并返回void。callback函数是一个符合该函数指针类型的函数,它接受一个int类型的参数并输出该参数的值。在main函数中,我们将callback函数的地址赋值给callbackPtr函数指针,然后将该函数指针作为参数传递给doSomething函数。在doSomething函数中,我们通过该函数指针调用回调函数callback,并将参数42传递给它。

C语言

在C语言中,可以使用函数指针数组来通过字符串调用对应的函数。具体步骤如下:

定义一个函数指针数组,数组中的每个元素都是一个函数指针,指向一个特定的函数。

将字符串和函数指针建立映射关系。可以使用一个结构体或者一个简单的二维数组来实现这个映射关系。

通过字符串在映射表中查找对应的函数指针,并调用该函数指针指向的函数。

以下是一个示例代码:假设我们有四个函数 foo、bar、baz 和 qux,我们可以通过字符串来调用这些函数。

#include <stdio.h>
#include <string.h>

// 函数声明
void foo(void);
void bar(void);
void baz(void);
void qux(void);

// 函数指针类型
typedef void (*func_ptr)(void);

// 映射表结构体
struct func_mapping {
    char *name;
    func_ptr ptr;
};

// 映射表
struct func_mapping func_map[] = {
    {"foo", foo},
    {"bar", bar},
    {"baz", baz},
    {"qux", qux}
};

// 函数实现
void foo(void) {
    printf("This is function foo.\n");
}

void bar(void) {
    printf("This is function bar.\n");
}

void baz(void) {
    printf("This is function baz.\n");
}

void qux(void) {
    printf("This is function qux.\n");
}

int main(void) {
    char input[128];
    int i;

    printf("Enter function name (foo, bar, baz, qux):\n");
    scanf("%s", input);

    // 在映射表中查找对应的函数指针
    for (i = 0; i < sizeof(func_map) / sizeof(struct func_mapping); ++i) {
        if (strcmp(input, func_map[i].name) == 0) {
            func_map[i].ptr(); // 调用函数指针指向的函数
            return 0;
        }
    }

    printf("Function not found.\n");
    return 1;
}

在这个示例代码中,我们定义了四个函数 foo、bar、baz 和 qux,并且将它们和字符串建立了映射关系。当用户输入一个字符串后,程序会在映射表中查找对应的函数指针,然后调用该函数指针指向的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值