视频字幕
函数指针是C语言中的重要概念,它是一个指向函数的指针变量,可以存储函数的内存地址。通过函数指针,我们可以间接调用函数,实现动态的函数选择。函数指针的声明语法是:返回类型加上括号内的星号和指针名,然后是参数列表。
为了实现计算器,我们首先需要定义四个基本的运算函数。加法函数add返回两个参数的和,减法函数sub返回第一个参数减去第二个参数的结果,乘法函数mul返回两个参数的乘积,除法函数div在除数不为零时返回商,否则输出错误信息。
定义函数指针类型是良好的编程实践。我们使用typedef关键字定义了Operation类型,它是一个指向接受两个整数参数并返回整数的函数的指针。这样做的好处是代码更清晰,便于维护,我们还可以声明一个函数指针数组来存储所有的运算函数。
主程序的核心是动态选择运算函数。我们定义了getOperation函数,根据输入的操作符返回对应的函数指针。在主函数中,读取用户输入的两个数和操作符,获取对应的函数指针,然后通过函数指针调用相应的运算函数并输出结果。
让我们通过一个具体例子来演示程序的运行过程。当用户输入五乘以三时,程序首先解析操作符星号,然后选择对应的乘法函数mul,通过函数指针调用该函数,最终输出结果十五。使用函数指针的优势是代码结构清晰,易于扩展新的运算类型,并且可以在运行时动态选择函数。
现在我们来设计计算器需要的四个基本运算函数。加法函数add接受两个整数参数,返回它们的和。减法函数sub返回第一个参数减去第二个参数的结果。乘法函数mul返回两个参数的乘积。除法函数div需要特别注意,当除数不为零时返回商,否则输出错误信息并返回零。所有函数都保持相同的参数类型和返回值类型,这为后续使用函数指针奠定了基础。
为了更好地管理函数指针,我们使用typedef关键字定义一个新的函数指针类型Operation。这个类型表示指向接受两个整数参数并返回整数的函数的指针。使用typedef的优势包括简化代码编写、提高可读性、便于声明多个同类型指针,以及统一函数接口规范。定义完成后,Operation就成为一个新的数据类型,我们可以用它来声明函数指针变量和函数指针数组。
接下来我们构建函数指针数组来实现动态函数选择。我们创建一个包含四个函数指针的数组ops,按顺序存储add、sub、mul、div函数的地址。数组索引与操作符一一对应:索引0对应加法,索引1对应减法,索引2对应乘法,索引3对应除法。通过getIndex函数将操作符转换为数组索引,然后使用ops[index]的方式调用对应的函数,实现了动态函数调用的机制。
现在我们来看完整的计算器程序实现。程序首先定义函数指针类型和四个运算函数,然后创建函数指针数组。主函数读取用户输入的两个数字和操作符,通过getIndex函数将操作符转换为数组索引,最后调用对应的函数并输出结果。以输入五乘以三为例,程序解析操作符星号,获得索引2,调用ops[2]也就是mul函数,计算得到结果15并输出。这种设计使程序具有良好的模块化和可扩展性。