首页 理论教育 使用函数指针的代码示例|Arduino单片机实战开发技术

使用函数指针的代码示例|Arduino单片机实战开发技术

时间:2023-10-23 理论教育 版权反馈
【摘要】:清单9-4显示了使用函数指针的代码。但现在,这一行很简单,funcPtr是一个指向函数的指针,该函数只有一个int参数并返回一个int数据类型。指针的名称funcPtr前面有间接运算符,因此编译器知道正在定义指针。周围的括号将指针标记为指向函数的指针。函数本身只显示传递给它的当前值。

使用函数指针的代码示例|Arduino单片机实战开发技术

正如你将看到的,你可以通过Arduino C中的指针调用函数,当基于特定值执行一组已知任务时,这非常有用。但首先,让我们看看如何使用指向函数的指针。清单9-4显示了使用函数指针的代码。

代码清单9-4.Using a Pointer to Function

清单9-4的某些部分一开始看起来有点奇怪,但它们确实有意义。第一个奇怪的说法是:

int(*funcPtr)(int n);//This defines a pointer to function

在本章后续内容“左右规则”的部分中,你将学习破译复杂数据定义的快捷方式。但现在,这一行很简单,funcPtr是一个指向函数的指针,该函数只有一个int参数(n)并返回一个int数据类型。声明将更改为:

int(*funcPtr)();//This defines a pointer to function with no arguments

如果函数接受两个浮点参数但不返回值,则声明变为:

void(*funcPtr)(float arg1,float arg2);//This defines a pointer to void function(www.xing528.com)

如你所见,函数指针的类型说明符由函数的返回值决定。指针的名称funcPtr前面有间接运算符,因此编译器知道正在定义指针。周围的括号将指针标记为指向函数的指针。第二组括号是指向函数的参数列表。

你可能已经想到了相关语句:

funcPtr=DisplayValue;//This copies the lvalue of DisplayValue

此语句将函数的左值复制到funcPtr中。正如变量在内存中有一个地址(即它的左值),函数也是如此。

下一项声明:

number=(*funcPtr)(number)

使用funcPtr调用DisplayValue()函数,将number的值传递给该函数。函数本身只显示传递给它的当前值。但是,函数会将数字平方,并将其作为函数调用的返回值发送到回调处,然后显示返回值,表明该数字实际上是该函数的平方。图9-5显示了程序的运行结果。如图所示,数字在计算过程中是函数调用的平方,并将该值返回给调处。

图9-5 程序运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈