道格·劳埃德：当你开始 使用函数，
另一件事将成为 真正重要的是了解，
这是变量的作用域的概念。
因此范围是 可变的特性
它定义从功能 该变量可被访问。
>> 有在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。