【摘要】:本章是第8章的延续。在本章中,你将学习:有效指针操作;指针算法;使用指向函数的指针;用于解密复杂数据定义的左右规则;为什么使用指针可以产生更高效的代码。当你完成本章后,你应该对在代码中使用指针感到非常舒服。因为指针的右值受到约束,所以有些运算符对指针没有意义。第二种形式是不可接受的,因为关系运算针对的是常量,而不是指针。这可能会使调试指针问题变得更加困难。
本章是第8章的延续。在那一章中,你学习了什么是指针,以及如何在表达式中操纵指针。在本章中,你将学习:
(1)有效指针操作;
(2)指针算法;
(3)使用指向函数的指针;
(4)用于解密复杂数据定义的左右规则;
(5)为什么使用指针可以产生更高效的代码。(www.xing528.com)
当你完成本章后,你应该对在代码中使用指针感到非常舒服。
有些C语言的表达式对几乎任何数据类型都有意义,指针除外。之所以如此,部分原因是指针只能有两种类型的右值:内存地址或NULL。其他数据都将导致某种形式的错误。因为指针的右值受到约束,所以有些运算符对指针没有意义。只有当两个操作数都是指针时,才可接受指针上的关系运算(例如,>=、<=、>和<)。因此:
事实并非如此。第二种形式是不可接受的,因为关系运算针对的是常量,而不是指针。在指针关系运算中使用常量时,可以使用cast消除错误消息,但这不是一个好主意,因为运算实际的数字地址几乎没有意义,往往只有程序运行了才知道左值。
指针比较运算必须在指向相同数据的指针之间进行,如果两个指针不指向同一数据对象,则不应对它们执行关系操作。如果你仔细想想,这样的比较根本没有意义(一个异常是检查指针是否为空)。但是,问题是Arduino C编译器没有捕获这种类型的错误。看看下面的代码片段:
指针上的if运算毫无意义,应该标记为错误,因为你正在比较指向不同数据对象的两个指针。但是,Arduino C编译器允许该代码通过。这可能会使调试指针问题变得更加困难。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。