一些零零碎碎的知识---typedef函数指针

今天在别人的代码里看到了这样一段东西

typedef enum {
    SUBPAGE_HOME,//主页面
    SUBPAGE_SETTINGS,//设置页面
    SUBPAGE_INFO//信息页面
} ui_normal_subpage_e;

typedef ui_normal_subpage_e (*ui_normal_subpage_handler)(uint8_t mask_row);

很明显第一段是一个结构定义枚举型,这个感觉没什么好说的,主要是为了限制输入的变量而已。
但是第二段就有点看不懂了。
我们先来引进一个固定的格式方便理解

typedef return_type (*alias_name)(parameter_list);
//typedef: This keyword is used to create a new type definition.
//return_type: The type of value that the function returns.
//(*alias_name): The alias name for the function pointer. The asterisk * indicates that it’s a pointer, and the parentheses () group the pointer declaration.
//(parameter_list): The list of parameters that the function takes, enclosed in parentheses.

那么根据这个格式,我们就可以这样大致理解这个语句:

typedef ui_normal_subpage_e (*ui_normal_subpage_handler)(uint8_t mask_row);
//函数指针别名为ui_normal_subpage_handler,输入的参数8位无符号类mask_row,返回的数据类型是ui_normal_subpage_e ,

OK,很明显这里缺少了具体的函数操作。这里再补充一个例子让我来更好地理解这个语句。

typedef int (*math_operation)(int, int);//定义一个typedef,关于数学运算的函数指针,输入两个int类型的数据,返回一个int类型的数据
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    math_operation op;//math_operation 由typedef定义,如上所示。
    //op 是一个变量!只不过它由math_operation 定义,而math_operation 是一个指向int(int,int)的函数指针,所以他自己也是一个指针。
    // op指向add
    op = add;
    printf("Addition: %d\n", op(5, 3)); // Outputs: Addition: 8

    // op指向subtract
    op = subtract;
    printf("Subtraction: %d\n", op(5, 3)); // Outputs: Subtraction: 2

    return 0;
}

从上面的例子我们可以看出,只有有了这个函数指针,且输入参数类型和输出参数类型一致,这个函数指针就可以指向任意的函数。并且调用对应的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值