对于那些有课程开发经验的人:关于数组的最佳策略是什么?
我见过一些学校在变量和控制结构之后教授数组,甚至在教学function之前。 这允许教授一些基本的算法等。然而,它带来了如何将数组传递给函数的问题,因此有必要回到数组指针被教导和补丁。
另一个选择是从变量和控制结构转到函数,然后教指针,一旦你有指针,从头开始教数组,然后用它来进行动态内存分配。
对我来说第二个选项更有意义,因为与简单变量不同,使用数组很容易“超出范围”,但是尚未了解内存和指针的学生可能无法理解这些界限之外的内容。
但是,我很想知道其他人的想法。
我认为最好的方法是一次引入1个概念。 您不需要在第一个模块中100%解释数组。 您可以通过一次引入1个概念来解决几乎任何问题。
我会按顺序教他们:数组,指针,数组+指针,OtherStuff [N]。
arrays:
您可以先教授简单数组,这样他们就能理解从单个变量名称访问多个数据槽的能力。
//The following doesn't need an understanding of pointers int x[10]; x[0] = 5;
指针:
然后,您可以通过一些简单的示例开始教授指针及其工作原理:
int y = 5; int *p = &y; *p = 6; printf("%in", y);
确保特别强调指针就像任何其他变量一样。 它存储一个内存地址。
目前还没有必要进入堆栈和堆。
数组指针+:
如何使用指针迭代数组:
int x[10]; x[0] = 5; x[1] = 6; int *y = x; printf("%in", *y);//prints the first element y++; printf("%in", *y);//prints the second element
然后你可以教更复杂的东西……
在所有示例中,大量使用sizeof和打印地址。 了解正在发生的事情确实很有帮助。
我会先教指针。 可以在不教授数组的情况下解释它们 在教导数组时,我可以在解释表达式a[i]
时引用指针,并在解释如何将它们传递给函数时。
不要过分思考。
尽可能清晰,有吸引力地教授这些概念远比你做它们的顺序更重要。
我建议先介绍一下数组的基础知识,然后再做一些指针和重新访问数组(这次更充分)。
您应该首先教授数组,因为它们几乎存在于任何其他语言中,并且更容易理解。 指针或指针的某些方面建立在有关数组的基础上。 这是有机秩序,imho,以及我在以后学习它的方式。
我假设你正在向那些已经知道如何用Java等其他语言编程的学生(或者我今天的Pascal)进行C语言教学。 我不认为C是一种很好的语言,可用于教授编程以完成新手。
我会先教指针。 这是将在C中学习的重要新想法之一。他们已经从其他语言中了解了数组的概念,因此没有必要先教这个。 所以当你用C语言覆盖数组时,你可以谈谈它们如何成为指针算术的语法糖,这是他们现在熟悉的概念。
他们应该同时被教导。
使用offset(typesize * index)作为指向base的指针访问的单维数组的示例应该是外观。
即
a[i] is equivalent to *(a + i)
在我担心数组之前,我教指针。 但是,通常情况下,我看到的学生,他们已经在其他语言的第一个CS课程中接触过数组。 然而,即使我在第一个CS类中教C,我也会在数组之前做指针并根据指针描述数组。 仅仅因为现在时尚人士认为“没有人会想要或者想知道计算机是如何工作的”并不意味着它是真的。
如上所述,我不认为订单很重要,但这是我希望有人向我展示这些东西的顺序。
有关第4点的更多信息,我真的建议第4章“令人震惊的事实:Carrays和指针不一样!” 在“专家C,深层C秘密”中。
/约翰
更新 :
这本书的一些链接,也有书的预览。 – 专家C,深层C秘密
用户对本书的评论是真实的: http : //www.amazon.co.uk/Expert-Programming-Peter-van-Linden/dp/0131774298
如果他们事先接触过汇编程序,请先指教。
如果他们已经接触过更高级别的语言(即几乎任何东西),那么首先要教数组。
根据我的经验,人们来到C而没有接触到汇编级编程(寄存器,地址,“计算机基础”)即将进入一个痛苦的世界。 恕我直言,你实际上最好先教授汇编级编码,然后引入C作为更好的汇编程序。
有趣的问题 – 我希望现在回答还为时不晚。
当我在80年代早期在波士顿学院教授编程时,我和我的同事每年都在努力解决这些问题,我们不断调整我们的方法。 那时C是一种新语言,所以我们的进展从Basic到Pascal。 我记得当时认为教C很难,因为它更松散,有更多的方法可以让学生搞砸,更让人感到困惑的是像数组和指针这样的区别你要教的东西。
我发现最有用的是尝试具体而不是抽象。 例如,在介绍编程课程中,我使用了一个简单的十进制计算机的解释器,你可以用它的十进制“机器语言”编程。 它的地址从0到999,操作码如1234,“1”表示“添加到累加器”,“234”是找到要添加的数字的地址。 学生会编写非常简单的程序,比如添加一个数字列表,然后他们会单步执行,观察每一步发生的事情。
我会让他们玩这个约3周,然后开始进入BASIC。 在第二个课程中,他们将进入Pascal。 那个小小的“计算机”完成的是传达一些具体的概念,使“真实”语言中的“抽象”更容易理解,例如:
现在,关于C,我听到它被贬低只是削减汇编语言,但我认为这是一件好事。 专家专家总是把它当成一种语言。 我认为如果你可以回访底层机器,那么数组,指针和结构的思想就很容易解释。 类似地,对于C ++和面向对象的编程。
因此,总而言之,如果学生理解计算机如何工作的基本概念,即使它是真正的人工计算机,那么解释更高级别的数据结构概念要容易得多。
取决于他们所知道的。 你在教C,还是编程和C?
我看到后者很少有成功。 C根本不是一种非常直观或宽容的语言。 虽然我看到学生们为编程而感到沮丧,但我还没有看到学生们开始感激不尽。
无论如何,那些将坚持编程的人将在业余时间外出学习C. 没有必要先把它推上去。
如果您只是在教C,并且他们已经知道指针和数组,那么可以在一节课中教授指针和数组如何在C中工作。
你会在字符串前教指针吗?
可能不是。 大多数相同的论点都适用。
(但一般我同意@legion – 不要过分思考它。)
我认为从数组开始会更好,因为数组的概念简单直观,但在C语言中,在教授思考之后重新访问数组是很重要的,正如之前提到的“军团”一样。
这个问题可以真正用于任何面向对象的语言。
当我被教授Java时,我首先展示了数组和指针,作为数组的最后一部分,以展示深拷贝和浅拷贝之间的区别。
需要了解更多c/c++开发分享在教C时,在指针之前或之后教导数组会更好吗?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享在教C时,在指针之前或之后教导数组会更好吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980573.html