[Powered by Google Translate] DAVID DICIURCIO:因此,一個重要的概念,掌握 編程的概念範圍。 範圍可以被定義為是一個變量的上下文中 可見或不可訪問。 例如,讓我們說,我們有一個功能,主,也就是 應該遞增變量x,從一個增加到兩個。 我們可以看到,主要的初始化x為1,打印 一些文字,然後運行該函數的增量,前 印刷更多的文字。 如果此功能才能正常運行,它會 打印輸出x 2。 讓我們試試吧。 所以,你可以看到,主並沒有做什麼我們所期望的。 它返回的值為1,而 比2我們的預期。 這個錯誤的原因可以解釋的範圍。 在功能上,主,我們初始化x 僅在該函數。 換言之,變量x被聲明內局部 功能,主要的,並且是不能訪問 以外的函數。 只有主在這種情況下,可以訪問x。 當我們調用增量,我們不傳遞X作為輸入,但 僅僅是x的一個拷貝。 由於這樣做的結果,該函數增量僅添加 值1到x的值的副本。 但不是X本身。 當我們返回到主,X本身並沒有改變。 因此,打印出x將只產生1的值。 好吧,那麼,留下了一個問題:我們應該如何解決 這個功能嗎? 一種解決方案是具有增量返回一個值。 以這種方式,該函數增量 給我們一個整數。 因此,這裡是我們修改後的代碼與 交替增加功能。 在這裡,我們代替返回x + 1的,而不是剛結束 x是等於到x + 1。 另外,需要注意,我們更換的輸出 增加,以前無效,用int,指出 增量將傳回一個整數值。 現在,增量運行後,它會返回值 2,正是因為我們意。 另一種情況,演示了範圍的重要性 是在scopeloop.c。 在這段代碼中,我們有一個for循環中的變量 總被初始化過程中的每一步。 不幸的是,這段代碼無法編譯。 這是因為實際不存在的變量total 外的循環。 循環內聲明的變量只存在於 循環本身,並證明我們的錯誤 消息,總申報。 但要聲明範圍內的變量總有 主要的功能。 此外,在每一次迭代的循環,我們 我們總被重新初始化為0。 這本身並沒有使代碼進行編譯,但它 防止總從不斷總結過去1的值。 同樣,什麼是最好的方式來解決這個問題呢? 其中一個更容易的方法,包括總的本地 的功能,主要的,而不是循環本身。 這總要遞增,最終, 允許它被印在for循環之後。 另一種技術,我只簡要地總結一下 是使用的全局變量。 全局變量是變量的聲明之前,主要 ,在整個程序中保持其價值。 當然,功能可以改變一個全球性的, ,但他們不出去的範圍和局部變量一樣。 然而,使用全局變量的傾向會讓人不悅 不好的設計,因為有更好的方法時 函數之間共享數據。 例如,使用指針。 但另一個時間。 最後,重要的是要了解的範圍 的上下文中的計算機的存儲器中,或RAM。 當我們執行一個程序時,局部變量和函數 被添加到一個特定的位置,在 RAM稱為堆疊。 作為函數的返回值的變量,堆棧幀 有效地去除從堆棧中釋放更多的內存。 因此,在審查範圍內,一定要記住這三個 關鍵點。 一,範圍可以是本地或全局。 這取決於聲明變量的位置。 二,聲明或初始化函數中的​​變量 本地的該功能,並且不能改變由其他 功能,至少在沒有使用指針。 最後,當變量也是局部的循環, 內聲明的。 變量是無法訪問 以外的循環。 這就是現在範圍。 感謝收看。