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