为什么指针是许多刚开始学习C或c++,甚至上了大学的学生困惑的主要因素?有没有什么工具或思维过程可以帮助你理解指针在变量、函数和级别之外是如何工作的?

有什么好的实践可以让人达到“啊哈,我懂了”的水平,而不会让他们陷入整体概念中?基本上,就是模拟场景。


当前回答

我发现Ted Jensen的“C中的指针和数组教程”是学习指针的极好的资源。它分为10节课,从解释指针是什么(以及它们是用来干什么的)开始,到以函数指针结束。http://web.archive.org/web/20181011221220/http://home.netcom.com:80/~tjensen/ptr/cpoint.htm

接着,Beej的《网络编程指南》教授了Unix套接字API,从中你可以开始做一些真正有趣的事情。http://beej.us/guide/bgnet/

其他回答

我不认为指针是一个特别棘手的概念——大多数学生的心理模型都映射到这样的东西,一些快速的盒子草图会有帮助。

困难之处在于,至少在我过去的经历和看到其他人处理的过程中,在C/ c++中指针的管理可能是不必要的复杂。

在我的第一节compp Sci课上,我们做了以下练习。当然,这是一个大约有200名学生的演讲厅……

教授在黑板上写道:int john;

约翰站起来

教授写道:int *sally = &john;

莎莉站起来,指着约翰

int *bill = sally;

比尔站起来,指着约翰

教授:int sam;

山姆站起来

教授:bill = &sam;

比尔现在指向山姆。

我想你已经明白了。我想我们花了一个小时来做这个,直到我们复习了指针赋值的基础知识。

我发现一个有助于解释指针的类比是超链接。大多数人都能理解,网页上的链接“指向”互联网上的另一个页面,如果你可以复制和粘贴这个超链接,那么它们都将指向相同的原始网页。如果你去编辑原始页面,然后按照这些链接(指针)中的任何一个,你会得到新的更新页面。

邮政信箱号码。

它是一条信息,允许你访问其他东西。

(如果你计算邮政信箱号码,你可能会有问题,因为信进了错误的信箱。如果有人搬到另一个州——没有转发地址——你就有一个悬浮指针。另一方面,如果邮局转发邮件,那么你就有了指向指针的指针。)

I think that the main reason that people have trouble with it is because it's generally not taught in an interesting and engaging manner. I'd like to see a lecturer get 10 volunteers from the crowd and give them a 1 meter ruler each, get them to stand around in a certain configuration and use the rulers to point at each other. Then show pointer arithmetic by moving people around (and where they point their rulers). It'd be a simple but effective (and above all memorable) way of showing the concepts without getting too bogged down in the mechanics.

一旦你学了C和c++,对某些人来说似乎就更难了。我不确定这是因为他们最终把他们没有正确掌握的理论应用到实践中,还是因为在这些语言中指针操作天生就更难。我不太记得我自己的转变,但我知道Pascal中的指针,然后转到C,完全迷失了。