[C] 二、回调函数

二、回调函数

作者:解琛
时间:2020 年 9 月 11 日

回调函数

函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。

populate_array 函数定义了 3 个参数,其中第 3 个参数是函数的指针,通过该函数来设置数组的值。

populate_array(myarray, 10, getNextRandomValue);

getNextRandomValue 不能加括号,否则无法编译,因为加上括号之后相当于传入此参数时传入了 int , 而不是函数指针。

我们定义了回调函数 getNextRandomValue,它返回一个随机值,它作为一个函数指针传递给 populate_array 函数。

#include <stdlib.h>  

int getNextRandomValue(void)
{
    return rand();
}

populate_array 将调用 10 次回调函数,并将回调函数的返回值赋值给数组。

void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i<arraySize; i++)
        array[i] = getNextValue();
}

完整的代码如下。

#include <stdlib.h>
#include <stdio.h>


void populate_array(int *array, size_t arraySize, int (*getNextValue)(void));
int getNextRandomValue(void);

int main(void)
{
    int myarray[10];
    populate_array(myarray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++) {
        printf("%d: %d\n", i, myarray[i]);
    }
    return 0;
}

void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i = 0; i < arraySize; i++)
        array[i] = getNextValue();
}

int getNextRandomValue(void)
{
    return rand();
}

执行结果如下。

xiechen@xiechen-Ubuntu:~/6.本地实验中心/3.c$ gcc 1.回调函数.c 
xiechen@xiechen-Ubuntu:~/6.本地实验中心/3.c$ ./a.out 
0: 1804289383
1: 846930886
2: 1681692777
3: 1714636915
4: 1957747793
5: 424238335
6: 719885386
7: 1649760492
8: 596516649
9: 1189641421
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

解琛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值