C语言定义函数指针(typedef)

本文介绍了一个简单的C语言程序,演示了如何定义和使用函数指针。通过两个示例函数add和sub,展示了如何将函数地址赋值给函数指针变量,并通过这些指针调用原始函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>


int add(int a, int b)
{
    return (a + b);
}

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

//使用typedef给函数指针类型一个别名
//typedef没有定义新的类型,给已经有的类型起一个别名,减少输入
typedef int (*padd)(int a, int b);//*类型,padd存储函数地址
typedef int (*psub)(int a, int b);//*类型,psub存储函数地址

int main(int argc, char *argv[])
{
    
padd padd1 = add; //创建函数指针
printf("%d\n", padd1(11, 19));

psub psub1 = sub; //创建函数指针
printf("%d\n", psub1(11, 19));


    return 0;
}
### C语言中 `typedef` 定义函数指针 在C语言中,`typedef` 关键字可以用来简化复杂的数据类型声明。对于函数指针而言,通过 `typedef` 可以为其创建一个新的类型名称,从而使得后续代码更加简洁易读。 #### 创建新的函数指针类型 当希望定义一个特定类型的函数指针时,可以通过如下方式使用 `typedef`: ```c // 声明名为 FunctionType 的新类型表示返回值为 void 并接受两个参数 (int 和 char)函数指针 typedef void (*FunctionType)(int, char); ``` 上述语句意味着以后可以直接利用 `FunctionType` 来代替复杂的语法结构,方便地声明多个相同特征的函数指针变量[^1]。 #### 函数指针作为参数传递 如果要将函数指针作为一个参数传入另一个函数,则可以在被调用方接收此参数的位置指定之前由 `typedef` 所定义的新类型名: ```c #include <stdio.h> // 使用 typedef 简化后的函数原型 void callFunc(FunctionType fp); // 实现部分省略... ``` 这样不仅提高了可维护性和清晰度,还减少了潜在错误的发生几率[^2]。 #### 示例程序展示如何运用 typedef 定义并操作函数指针 下面给出一段完整的例子说明怎样结合 `typedef` 与函数指针实现回调机制等功能特性: ```c #include <stdio.h> #include <stdlib.h> // 利用 typedef 给定一种通用形式的函数指针类型 typedef void (*CallbackFunc)(const char*); // 被其他地方调用的目标函数之一 static void greet(const char* name){ printf("Hello %s\n",name); } // 接收任意数量字符串并通过提供的回调处理它们 void processNames(CallbackFunc cb,...){ va_list args; const char *arg; va_start(args,cb); while((arg=va_arg(args,const char*))!=NULL){ if(cb != NULL)(*cb)(arg); // 如果有有效的回调则执行它 } va_end(args); } int main(){ // 向 processNames 发送一系列名字,并让其依次打印出来 processNames(greet,"Alice","Bob","Charlie",(char*)0); } ``` 在这个实例里,先借助于 `typedef` 设定了一个适用于所有无参且只输出信息到控制台的函数模板——即 `CallbackFunc` 类型;接着,在实际应用过程中只需按照既定模式编写相应逻辑即可完成预期功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值