你好欢迎回来｡
在这堂课中, 我想谈谈 关于局部变量和全局变量｡
这就是函数的概念 范围内或一般程序范围内｡
这跟什么时候 您可以使用变量, 也可以在无法使用变量时使用｡
我们知道函数是什么｡
所以现在我想谈谈 关于局部变量｡
局部变量的作用 但它不仅仅是功能｡
局部变量与 任何有代码块的东西｡
所以变量定义在 函数的局部变量称为自动局部变量｡
所以在这个函数体中
如果您声明了一个变量, 则 variable是局部变量｡
它将自动创建 每次调用该函数时｡
此外, 对变量访问仅限于函数的局部｡
你不能访问那个变量 在函数之外｡
因此无法访问变量 如果它是特定函数的本地函数, 则在其他函数中｡
只有在 从定义它的地方｡
如果给定初始值
函数内部变量, 初始值为 每次调用函数时分配给变量的值｡
如果要保留 一个变量,
实际上有一种方法可以做到这一点 在c中, 它被称为函数内部的静态变量.
这也是一种更先进的
这不是初学者的概念, 但它是一种方法, 你可以 实际上每次调用函数时都有不同的数据｡
所以如果你想保持 函数被调用次数的计数器,
则应声明 函数内部局部变量名为static, 带有一个static关键字｡
但如果没有普通的 局部变量每次都会有新的值
您可以使用auto关键字 数据类型, 但这不是必需的｡
它确实使它成为 再精确一点｡
编译器将通过以下方式添加它 如果不包含它, 则为默认值｡
但如果你把它包括进去
只是为了让它更精确, 没这个必要
所以它被称为 自动局部变量｡
c中有一个名为auto的关键字, 但你不需要提供它是默认提供的,
这就是为什么 在很多定义变量的例子中是看不到的
并在函数内部声明｡
局部变量也适用于 在块､
循环或if语句中创建变量的任何代码｡
同样, 如果您在 if语句的块是什么,
就是括号开始的地方.
这被称为块｡
块可以在功能､ 块可以是if语句, 块可以是循环｡
块可以位于任何位置, 基本上都是括号｡
有括号的地方 然后创建变量｡
变量的创建正在声明 并可能为其赋值｡
但是如果你声明了这个变量
在块内创建变量时, 只能使用 块中的变量｡
如果你试图进入 变量, 则不会使用该变量｡
如果你有一个if语句
在if语句中声明一个变量, 您可以访问 if语句块之外的变量, 与with循环相同｡
这很重要 才能理解这个｡
编译器会抱怨 并在您尝试从其他位置访问它时显示错误｡
这意味着 数据中的值仅适用于该块｡
您没有共享任何数据｡
全局变量是 与局部变量相反｡
可以访问全局变量 通过程序中的任何函数｡
您创建全局 变量的方法是把它放在任何函数之外的顶部｡
全局变量是这样声明的 并且它们不属于任何函数｡
记住, 主关键字 主要是函数｡
因此, 在 主功能只能在主功能中访问｡
所以变量在主 函数不能在任何其他函数中访问｡
如果你想要一个变量 所有函数都使用的变量, 你把变量放在函数之外,
通常在源文件的顶部,
通常将其标记为 表示这是一个全局变量｡
全局变量是一个谎言 从节目开始到结束的整个节目 它会停止,
这个全局变量会被定位到内存中｡
程序中的任何函数都可以 更改该全局变量的值, 因为它们 访问它, 他们可以修改它｡
所以你应该开始思考 这看起来有点危险因为现在你有了 可以在任何地方访问相同数据的代码,
但我们会谈到这一点｡
如果声明了局部变量
在与全局变量同名的函数中, 则 函数将使用局部变量, 则它将屏蔽全局变量｡
因此,
如果您有一个名为 函数中有一个名为x的局部变量, 变量将优先｡
它不会改变 全局变量数据｡
如果您将 变量,
它只会修改局部变量｡
所以全局变量不是
当您使用相同的名称时, 它实际上不会
在该本地函数中访问, 因此不要使用相同的 因为这会让人很困惑｡
对于那些编程了 很多高级程序员他们马上就注意到了这一点
他们会说嘿这只是
实际上只是修改局部变量, 即使它们看到 具有相同名称的全局谓词｡
但对于初学者来说 并不总是很清楚｡
让我给予个例子｡
在本例中, 我们
在main函数的最前面创建一个全局变量｡
而你想要的组织方式 你的程序通常让你在一些语句之后的顶部包含语句
注释, 然后你可能有一些定义的常数, 然后你
会有你的全局变量
全局变量看起来只是 就像正常变量一样｡
他们就在那里 实际上已宣告｡
如果它们是在 一个函数, 那么它们就是全局的｡
在本例中, 我们有一个 名为my global全局变量
我们将其初始化为0｡
我们也可以初始化这些 全局变量｡
我们可以初始化它们 我们可以声明它们或者在任何函数中初始化它们｡
是个整数｡
我们还有两个功能, 在一个名为my
function的函数中返回main函数｡
在那里, 我们有当地的
只能在这些函数内部访问的变量｡
在主函数中, 我们有一个我本地的主要｡
您只能访问我的本地 main函数中的main｡
但因为我的全局变量 这是全局的, 您也可以在main函数中访问它｡
所以主要可以访问两个 变量､ 局部变量和全局变量｡
我的函数有一个局部变量
因为它是在函数体的括号内声明的 我们可以访问全局变量, 也就是我的global
我们也可以访问x, 但是 我们无法访问我本地｡
我应该说是我的本地总管｡
因为我的本地主要是 在主函数中｡
我们没有权限｡
如果我们试图写或读我的 局部主变量, 编译器为
会给予你一个错误｡
你要明白 局部与全局的概念｡
局部变量位于代码块内部｡
当它们被声明时, 您可以 只在块中使用它们｡
如果变量在块之外 它就在一个函数里或者程序里
您可以在任何函数中访问它｡
应避免使用全局变量｡
全局变量为 是件坏事｡
他们之所以为全球 变量是坏的, 为什么要避免它们,
是因为它 促进了功能之间的耦合｡
耦合是什么意思？
耦合意味着依赖｡
如果有全局变量
它被四个函数使用, 这意味着每个函数 这些函数中的一个函数可以依赖于另一个函数｡
依赖有什么不好？
依赖关系导致程序被 调试和查找错误的难度更大｡
如果你的程序有错误
而你使用的是一个全局变量 这个bug可能在任何函数中任何地方 使用该全局变量｡
这会让事情复杂化 当您有全局数据时｡
您有一个全局变量, 它可以 在功能一､ 功能二､ 功能三､
功能四中进行修改｡
你没有限制访问权限｡ 一旦你发现了错误
如果你把它孤立起来, 它可能很难修复｡
因为当你修好它的时候 由于这些依赖性而导致其他函数出现问题｡
全局变量应 由于这种耦合而尽可能地避免, 由于这些依赖关系, 因此,
在某些情况下, 可能会出现这种情况｡
有时候你可能需要 使用它, 但您应该避免它｡
最重要的是
大多数面向对象的语言如C++中的现代语言 和java, 甚至都没有全局变量的概念｡
它们有静态变量 可以是类变量, 但它们仍然封装在类中｡
因为全球数据是这样 一件坏事, 新语言实际上试图禁止｡
你应该尽量避免
因为它只会使程序复杂化 更难发现和调试错误｡
不使用全局 数据, 将数据传递给函数｡
如果函数需要访问 传递给它｡
如果数据量很大 我希望有很多参数, 理论上,
你永远不应该 具有多于五个参数｡
有一本很棒的书叫 干净的代码,
讨论代码的质量和要避免的事情 要避免的东西, 比如全局变量｡
它还谈到了 函数中应该包含的许多参数｡
如果函数有20个参数, 这就表示出了问题, 主要是因为
可能做得太多了｡
但是函数可以访问数据 通过将数据传递给它, 您可以限制全局数据的使用｡
而对于一个需要大量
你可以用一个我们还没讲过的结构体 但这是另一种方法
所以不要太多地使用全局数据 只有在必要时才能这样做｡
确保您理解代码｡
请确保您记录 非常非常好｡
这样别人看起来
立即知道您使用的是全局数据 知道一切是怎么运作的｡
这就是函数作用域的概念｡
你应该明白这点, 所以请注意这些幻灯片｡
我们还会用一些 全球数据和一些本地数据｡
-谢谢—谢谢