代码之家  ›  专栏  ›  技术社区  ›  Nicholas Armstrong

C语言教学参考文献#

  •  5
  • Nicholas Armstrong  · 技术社区  · 15 年前

    几周后,我将教一班一年级的工程师C中的参考要点,作为他们一年级编程课程的一部分。他们中的大多数人以前从未编程过,学习对象也有足够的困难,因此教学参考将是一场艰苦的战斗。我计划为学生们提供大量的例子,让他们自己去做,但是如果基础概念没有“点击”,那么仅仅展示一堆例子就有可能让人难以抗拒。

    所以我会把这个问题告诉社会组织:你看到参考文献教学的最好方式是什么?是什么让你“点击”的?有没有我丢失的参考资料?

    我的初步教学计划是:

    1. 什么是参考(使用 argument like Eric Lippert's )
    2. 引用和垃圾收集器
    3. 引用类型和值类型
    4. 不变类型
    5. 通过引用传递与通过值传递(以及 all of the subtleties 按值传递的对象引用数)
    6. 如果你不理解1-5,就会产生意想不到的结果。
    8 回复  |  直到 13 年前
        1
  •  5
  •   Joel Martinez    15 年前

    我听到它解释的一种方法是使用手机或对讲机。您(指导者)持有一端并声明您是一个对象实例。你呆在一个地方(即堆),而学生们在教室的另一端经过(如果是手机的话,那是扬声器电话)。

    他们可以通过他们对你的“参考”与你互动,但他们并不真正拥有“你”。

        2
  •  3
  •   mike    15 年前
        3
  •  2
  •   Josh Smeaton    15 年前

    我喜欢描述引用类型和值类型之间差异的URL类比。您可以传递一个URL作为对某些内容的引用。您可以在不修改该内容的情况下修改该URL。您还可以通过URL访问内容,以修改内容。

    这是一个有用的参考:

     http://www.yoda.arachsys.com/csharp/parameters.html
    
        4
  •  2
  •   Spoike Otávio Décio    15 年前

    试着解释参考文献 数字 因为纯文本有时无法传达给大多数人。许多关于这个话题的资源和书籍,确实试图通过数字来解释,因为仅仅通过口头交流很难将分配联系起来(这对于大多数人来说,主要是注意力跨度的问题)。

    至少试着指出对象是如何相互关联的,一个简单的例子就是一个简单的引用。

    鉴于:

    class A {
        B b = new B();
    }
    
    class B {
       int mine = 1;
    }
    

    实例化类时 A 作为对象 a 从某个上下文中,下图将说明它在堆中的外观。插图的要点是展示不同对象之间的关系,并为堆的工作方式建立一个心理模型。

             +-A-----+
    a: *---->|       |
             |       |   +-B--------+
             | b: *--+-->|          |
             |       |   | mine: 1  |
             +-------+   |          |
                         +----------+
    

    还要尝试解释堆和堆栈分配之间的区别。使用参数调用方法。简单的例子如下:

    给出以下方法:

    public void doSomething(B b) {
       int doMine = b.mine + 1;
    }
    

    打电话时 doSomething 最后,让它去做这件事 剂量测定法 的堆栈如下所示。表明对象不直接驻留在堆栈中,但它只是引用了堆中的一个对象,对象通过引用共享。

    whoever called doSomething *
                               |
                               v
    +-doSomething-+   +-B--------+
    | b: *--------+-->|          |
    |-------------|   | mine: 1  |
    | doMine: 2   |   +----------+
    +-------------+
    

    另一个示例是说明一个对象数组,多维数组包含一个数组数组。

        5
  •  1
  •   Jay Riggs    15 年前

    我发现 this article 对于解释传入c的参数非常有用。本文还很好地解释了一般意义上的价值和参考类型。

    它更像是一种视觉表现,对我有很大帮助。

        6
  •  1
  •   David R Tribble    15 年前

    图片和图表。

    人们形成他们正在学习的概念的心理图像,以及 参考文献 以及他们与他们的关系 物体 是开始的好方法。同样,可视化 对象 作为包含成员 变量 (包括对其他对象的引用)和成员 方法 一个LA UML图非常有用。

    稍后,如果您觉得有必要,可以深入研究引用和基元类型实际上是如何实现的。但是尽可能拖延这些讨论,因为人们可能陷入将抽象概念与表示性细节配对的困境,这会分散学习抽象概念的注意力。

        7
  •  1
  •   snarf    15 年前

    当我学习vb6时,参考文献实际上让我有点困惑。然后我尝试学习C++,在处理指针之后,引用对我来说是完全有意义的。从实际发生的角度理解它比从OO概念的角度理解它更容易。也许你可以复习一下你课上的那些东西。

        8
  •  1
  •   supercat    13 年前

    我建议尽量减少使用裸词“reference”,因为它可以在.NET中用于引用两个非常不同的东西:类类型存储位置的内容和用“ref”限定符传递的参数。前者使用术语“对象引用”,后者使用术语“引用参数”。

    在描述“对象引用”是什么时,我建议使用术语“对象ID”。对象ID有一些不同于“地址”的东西:

    1. 使用对象ID不能做很多事情。可以测试一个对象是否为空,检查两个对象是否相等,将一个对象复制到合适类型的存储位置,或者查找一个对象引用的对象并要求它做一些事情。大多数使用类类型值或变量执行某些操作的请求实际上是使用引用的对象执行某些操作的请求。请注意,不能像处理地址那样以获取另一个对象的ID的方式操作一个对象的ID。
    2. 虽然系统必须有一种将对象ID转换为地址的方法,但不能保证它会使用任何特定的方法。也不能保证与任何对象ID关联的位模式不会自动更改;所保证的是,如果位模式更改,新模式将引用与旧模式相同的对象。
    3. 系统跟踪存储对象ID的每个位置。只要存在对象ID的任何副本,该对象ID将永远不会引用对象实例以外的任何内容。相比之下,一般来说,使用地址的系统不会跟踪可能复制地址的每个位置。一个对象可能会在某人仍然拥有其地址的副本时停止存在,并且可能会用相同的地址创建一些新对象。
    推荐文章