所以我将在即将到来的学期在一所大学教授第二学期的新生C + +课程.学生们已经使用了数组(虽然只是静态分配)并且有一些引用和指针的概念(但可能不多).一般来说,他们没有做过大量的动态内存分配和管理.我试图利用Stack Overflow社区的全球智能,在您的集体经验中,看到了向年轻的计算机科学专业学生提供指针和记忆管理等方法的最有效方法?
在相关主题上有很多有趣的StackOverflow帖子:
我当然对我教的方式和内容有自己的一套看法,但我真的对我的方法与你的方法有什么不同感兴趣.一些要考虑的子问题(你肯定不限于这些):
你会教什么命令以及如何将这些主题联系起来?"普通"堆栈变量,后跟引用,后跟指针?数组在哪里适合?你什么时候介绍"新"关键字?等等
您看到哪些视觉辅助工具最能表达这些概念?例如,内存值的内存位置的绘图框和变量/指针的名称,箭头指向框?你读过的任何特定的网站或教科书是否有优秀的描述?
是否有特定的代码示例(例如"交换"功能)往往比其他代码更好地获取信息?
教!
试图将其与我发布的一些链接区分开来:
我发布的大多数以前的SO链接都非常直接关注指针.虽然指针是理解记忆行为的一个组成部分,但我对学生如何理解记忆如何运作的更为全面的主题感兴趣.我们如何最好地说明正常,指针和引用声明之间的差异?我们如何强调全局,堆栈和堆变量之间的差异?我认为即使将返回地址推送到调用堆栈也是公平的游戏.您认为内存管理最重要的方面是什么,如何将它们组合在一起,以及如何以一致的方式实现这一目标?
因为我一直是一个有逻辑的人,所以我最想听的是为什么需要动态分配,而不是它是如何工作的以及特定语言中的语法如何。从静态分配开始,当你遇到限制时,继续讨论情况,引入动态分配。尝试解释不同的运行时范围(编译时、运行时和边界情况)。解释何时使用哪种分配技术。对于堆分配,您可以使用共享内存情况并表明有必要有一个引用机制,并通过该机制引入指针。表明您无法使用共享所有者语义轻松确定内存区域的生命周期,并显示不同的解决方案(引用计数、手动释放等),并描述为什么您需要权衡而不仅仅是一种解决方案。使用内存分配之外的其他示例(例如 RAII)来表明您展示的技术不仅限于内存,而是适用于任何类型的资源。
我认为关键是从头开始构建知识,而不是像白痴一样对待人们(Blinky),而是要记住,许多人在该领域的经验有限,并且需要具体的例子来理解为什么所有功能已就位。有很多因素在起作用,明确定义约束条件以便学生理解问题的表述可能是教授此类事物的最重要方面。
一个例子胜过千言万语,给学生提供具体的例子,让他们到目前为止所知道的事情不能解决问题,使他们能够推理问题并最终采取下一步。
归档时间: |
|
查看次数: |
1244 次 |
最近记录: |