我已经大量使用过指针,但每当我使用它们时,我仍然觉得可能会有一些意外情况发生。我的思维并不确定它们的行为方式。
您有什么建议吗?我想更好地学习指针。
如果你想检查自己的水平,可以随时要求更多的练习题,如果你还没有在网上找到足够多的练习题--像“原地反转单向链表”或“给定指向节点的指针,从单向链表中删除一个节点”这样的简单但关键的问题是经典的,但真正理解它们仍然是衡量自己在指针问题上的好方法。(单向链表是困难但重要的指针练习的好来源...这可能是为什么现在仍然使用的C++标准只提供双向链接列表的部分原因,它们只产生了不那么“有趣”的问题!-)。
我同意Duleb的观点,只需编写一些代码。
但是,为了帮助您理解,可以画出正在进行的内容,因为您可能有指针数组,并且需要遍历,因此您有指向指针的指针。
通过绘制图表,您可以可视化正在发生的事情,过一段时间后,您可能会发现自己在脑海中绘制这些图像,这将更加清晰明了。
不幸的是,在您习惯使用指针之前,它们可能仍然是一个谜。 我认为您无法仅通过阅读书籍来理解如何使用它。
尝试一下汇编语言。这将会让你非常快速地了解指针的实际含义。
要记住,在本质上,所有数据操作、所有数据结构、所有的类型,都只是在移动或追踪存储在内存中的比特。
理解整数数组只是一个大小为1个整数乘以数组元素数量的内存块,意识到结构体没有什么魔法分隔符或元比特漂浮在内存中将成员变量分开,有助于你记住(实现?)C程序设计的禅意。
你想更好地学习指针吗?学习void指针。它是最纯粹的指针形式,没有任何偏见,思考一下你可以从内存中相同的位值中实现什么样的值。
最后一切都是虚幻的——放弃对不灵活类型的依赖——并记住内存中的比特。指针比整数或字符更加纯净,而void指针则是其中最纯粹的。
我认为,这是每个程序员都知道但很少人实现的东西。