道格·勞埃德：當你開始 使用函數，
另一件事將成為 真正重要的是了解，
這是變量的作用域的概念。
因此範圍是 可變的特性
它定義從功能 該變量可被訪問。
>> 有在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。