如何学习C指针?

我经常使用指针,但是每当我和它们一起工作时,我觉得可能不会像我期望的那样工作。 我的头脑不确定他们的行为方式。

你有什么建议? 我想更好地学习指针。

最好的方法是编写程序。 亲身体验K&R,完成基础知识并开始编写一些程序。
样本问题可能是:
1)单链表,双链表。
2)基本的树问题。
– 将值插入树中。
– 找到高度,深度,删除树等。

试试Binky 。

我建议阅读Kernighan和Ritchie的“The C Programming Language”。

第5章讨论指针和数组。 这本书写得很清楚,包含了演示概念的插图,还有练习你可以做的练习。 更好的是,这本书很短。

仔细执行你可以在网上找到的所有练习 – 这一个 , 这一个等等(跳过C ++特定部分,如“参考”,如果你真的只关心C)。 如果有的话,请务必仔细研究或排练练习中给出的每个先决条件。 完成后,将您的解决方案代码与作为官方解决方案提供的代码进行比较 – 他们是否在给出的示例中编译和工作相同? 那些更广泛的变种怎么样? 你有任何疑问,请问堆栈溢出! – )。

如果你想检查自己的表现如何,如果你没有在网上找到足够多的话,可以随时要求更多的练习 – 简单但关键的一些,例如“在现场反转单个链接列表”或“从中删除一个节点”给出指向该节点的指针的单链表“是经典的,但真正得到它们仍然是衡量指针问题的好方法。 (单个列表是困难但重要的指针练习的重要来源……这可能是仍然当前的C ++标准仅提供链表的原因的一部分,它们只是不会产生那么多“有趣”的问题! – ) 。

简而言之 – 指针只是一种间接技术。 例如,不是直接(通过值)将数字传递给例程,而是可以只传递存储数字的地址,以便需要它的例程可以在地址中查找。 现在这很有趣,因为拥有该地址的人可以更改存储在该地址的值 – 该地址的所有其他持有者都可以看到该更改的结果。

在进行指针运算或指向函数的指针时,指针周围可能会有很多混乱的语法,但如果你给自己一些时间来考虑它,那么指针的基本思想很简单(并且可以使用几个简单的例子。)

祝好运,

保罗

我同意Duleb,只是写一些代码。

但是,为了帮助你理解,绘制出正在发生的事情,因为你可能有一个指针数组,你需要通过,所以你有指针指针。

通过绘制图表,您可以想象正在发生的事情,过了一段时间,您可能会发现自己在脑海中绘制这些图像,这将更有意义。

不幸的是,在你习惯使用它之前,指针可能是一个谜。 我认为只要读一本书就不能真正理解如何使用它。

尝试使用某种汇编语言。 这将真正,非常快地向您展示实际指针。

请记住,在它的核心,所有数据操作,所有数据结构,所有类型,只是移动位或在内存中跟踪它们。

理解一个int数组只是一个内存块,大小为1 int乘以数组中元素的数量,并意识到struct没有一些魔术分隔符或代码浮动在内存中保持成员变量分开,有助于你要记住(实现?)C编程的禅。

你想更好地学习指针吗? 学习void指针。 它是没有任何偏见的那个,最纯粹的指针forms,并且考虑你可以从内存中的相同位实现的值。

它最终都是烟雾和镜子 – 忘掉你的硬类型 – 并记住内存中的碎片。 指针比int或chars更少掺杂,而void指针是最纯粹的指针。

我认为这是每个程序员都知道的事情,但很少有人意识到。