道格·劳埃德:当你开始 使用函数, 另一件事将成为 真正重要的是了解, 这是变量的作用域的概念。 因此范围是 可变的特性 它定义从功能 该变量可被访问。 有在C中两个主要范围, 局部变量和全局变量。 现在,局部变量只能 被中的函数访问 在他们创建的。 它们不能被每隔一个访问 功能存在于你的程序, 仅在函数 创建它。 全局变量,在 另一方面,可接 在该程序中的任何功能。 而其中的原因是 因为他们没有内部创建 的任何特定的功能。 我们声明它们的外 所有的功能, 意味着每一个功能都知道在哪里 它是与可以访问和操作它。 到目前为止,在使用过程中你已经很 很多被专门工作 与局部变量。 这里有一个例子非常非常 简单的主要功能和一个非常简单的 我们已经写了附加功能。 在这种情况下,x,它 我用绿色刚刚 突出地域或 该变量的范围, 是函数的局部三倍。 主不能引用到x的。 它不知道它是什么。 没有其他的功能,事实上,如果我们 在这里有附加功能, 可以参考到x。 同样的,结果我已经 蓝色,是当地唯一的主。 只有主力知道 变量结果。 三联不能使用它。 现在,正如我所说, 全局变量确实存在。 如果你声明的变量 在任何函数之外, 中的所有的功能 程序可以引用它。 因此,在这种情况下,我已经强调 绿色的全局变量声明。 在这种情况下, 变量被声明 被称为全球性的,只是为了 非常清楚的。 这是float类型。 我给它分配的值0.5050。 你会发现,在主要的和 三,我能够引用全局。 而事实上,如果我办理程序 所示,主首先调用三, 三乘法全球3,这 将其值设置为1.5的东西, 1.51或类似的东西,和 随后主还打印出的价值 全球。 因此,主不会打印出0.5050,这 将打印出环球时报3,1.51。 所以,你得时候要小心 您正在使用全局变量。 虽然他们是非常灵活的 能够传递信息 围绕让每一位 功能可以使用它, 它也可以有一些 危险的后果 如果一个函数的变化 一个变量的值 你希望在它之前被改变。 为什么这个区别很重要? 为什么我们不在乎是否一定变数 是局部的,其它的是全球性的? 井,在大多数情况下,局部变量 在C是什么叫做按值传递 当我们做一个函数调用。 这意味着什么? 那么,当一个变量传递 按价值计算,被叫方,这 是说功能的另一种方式 正在接收变量 被传递作为输入,实际上它 没有收到变量本身。 它接收它自己的 它的副本一起工作。 这是一个非常重要的区别。 我们刚才看到在一秒钟前 与全局变量, 如果我们操作全局 在一个函数变量,效果 在这一个功能进行 通过对所有其他功能。 但随着局部变量, 这不是真的。 每个功能时, 接收变量作为输入 接收这些变量的副本, 而不是变量本身。 那么,什么是该副作用? 这意味着,在可变 呼叫者,该功能 为使函数调用,是 不变的,除非你覆盖它。 例如,在该码 FOO不会改变。 诠释FOO等于4,请致电三 FOO的,三重里面, 我们可以预料,富会 3相乘并返回, 但实际上没有任何影响。 这里虽然很细微的区别。 这确实有我们想要的效果。 你知道为什么吗? 我们覆盖FOO主这个时候。 因此,INT FOO等于4,富平等 三FOO,当我们打这通电话, 三重获得自己的副本 中富,其自身的4副本。 它说,返回4倍3,或任何 变量被传递时间3。 然后我们分配收益 三重价值再次foo中。 因此,这实际上将覆盖FOO。 这是做的唯一途径 这与局部变量。 因此,如果我们再添 代码在这里行 在主要的结束 打印出foo的值, 它实际上将打印出12。 变量范围一般是 没有太多的问题 如果您命名所有的 变量不同的东西。 但它可以得到一种讨厌 如果相同的变量名 出现在多个功能, 这会发生很多。 如果你不工作 现实世界里, 您正在使用的协作 在不同的团队计划和人员 正在共同努力,以编写相同 程序或同一组的节目, 他们会经常重复使用的变量 的名字,尤其是常见的 像的x,y,I,J,等。 但是,当变量具有 相同的名称,适用范围问题 可以得到一个有点棘手解析。 例如,你知道 什么将被打印出 在这个特定的程序的结束? 花一分钟时间。 暂停视频和读 通过这一方案。 您可以在上面我们看到的 有一个函数声明 一个叫递增的功能。 这个函数只有一个 参数,一个整数,我们称之为的X. 和它输出的整数。 这是在开始的返回类型。 然后我们有主,几行 在主代码,其中最后一个 是一个print语句。 请记住,这是这里的问题。 什么是真正将是 印在这个函数的结束? 然后我们居然有 定义低于增量。 因此,需要一分钟,步 代码,跟踪的东西出来。 你知道什么将被打印在 这个特殊程序的结束? 好吧。 但愿,你已经采取了几秒钟 通过尝试解析这一个。 让我们一起做吧。 所以,我已经越过了增量的 声明在那里的顶部。 这是一种分心。 这不是它自己的变量。 它不具有其自身的范围。 这只是一个功能 报关,所以为了 试图分析出什么 在这个程序中, 我们可能也只是避免它。 现在我们在这种情况下, 原因这个问题是棘手 是因为我们在本地变量 两个主和增量,其中每个 一个称为x。 当然,这个问题的关键是 试图苏斯哪些x被改变 它是如何得到改变。 所以我彩色每一个实例 x的这是当地的主要红色。 我也有色的每个实例 X中的本地递增的蓝色。 在第三行的通知 主,Y等于增加 X,该增量是不是被 通过主要的X,或红色的X。 它获得通过它的一个副本。 而且它一定会一起工作 它的副本,蓝色的X. 如果你数学 斜,你可能 已经不是想到了这一点为x分 M代表主×副我为增量。 但它同样的想法。 ×副m或红色X的 在上一张幻灯片, 是是local--变量 为x宁可实例 是本地的主,并且x子i或所述 蓝色的变量上一张幻灯片, 是x的实例中的 本地递增。 所以,是你能找出什么 这个功能打印在结束了吗? 我是道格·劳埃德,这是CS50。