首页 理论教育 Arduino单片机实战开发技术第9章:有效使用指针

Arduino单片机实战开发技术第9章:有效使用指针

时间:2023-10-23 理论教育 版权反馈
【摘要】:本章是第8章的延续。在本章中,你将学习:有效指针操作;指针算法;使用指向函数的指针;用于解密复杂数据定义的左右规则;为什么使用指针可以产生更高效的代码。当你完成本章后,你应该对在代码中使用指针感到非常舒服。因为指针的右值受到约束,所以有些运算符对指针没有意义。第二种形式是不可接受的,因为关系运算针对的是常量,而不是指针。这可能会使调试指针问题变得更加困难。

Arduino单片机实战开发技术第9章:有效使用指针

本章是第8章的延续。在那一章中,你学习了什么是指针,以及如何在表达式中操纵指针。在本章中,你将学习:

(1)有效指针操作;

(2)指针算法

(3)使用指向函数的指针;

(4)用于解密复杂数据定义的左右规则;

(5)为什么使用指针可以产生更高效的代码。(www.xing528.com)

当你完成本章后,你应该对在代码中使用指针感到非常舒服。

有些C语言的表达式对几乎任何数据类型都有意义,指针除外。之所以如此,部分原因是指针只能有两种类型的右值:内存地址或NULL。其他数据都将导致某种形式的错误。因为指针的右值受到约束,所以有些运算符对指针没有意义。只有当两个操作数都是指针时,才可接受指针上的关系运算(例如,>=、<=、>和<)。因此:

事实并非如此。第二种形式是不可接受的,因为关系运算针对的是常量,而不是指针。在指针关系运算中使用常量时,可以使用cast消除错误消息,但这不是一个好主意,因为运算实际的数字地址几乎没有意义,往往只有程序运行了才知道左值。

指针比较运算必须在指向相同数据的指针之间进行,如果两个指针不指向同一数据对象,则不应对它们执行关系操作。如果你仔细想想,这样的比较根本没有意义(一个异常是检查指针是否为空)。但是,问题是Arduino C编译器没有捕获这种类型的错误。看看下面的代码片段:

指针上的if运算毫无意义,应该标记为错误,因为你正在比较指向不同数据对象的两个指针。但是,Arduino C编译器允许该代码通过。这可能会使调试指针问题变得更加困难。

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

我要反馈