1 00:00:07,150 --> 00:00:08,850 [Powered by Google Translate] DAVID DICIURCIO:因此,一個重要的概念,掌握 2 00:00:08,850 --> 00:00:11,010 編程的概念範圍。 3 00:00:11,010 --> 00:00:13,860 範圍可以被定義為是一個變量的上下文中 4 00:00:13,860 --> 00:00:15,610 可見或不可訪問。 5 00:00:15,610 --> 00:00:18,150 例如,讓我們說,我們有一個功能,主,也就是 6 00:00:18,150 --> 00:00:22,570 應該遞增變量x,從一個增加到兩個。 7 00:00:22,570 --> 00:00:25,690 我們可以看到,主要的初始化x為1,打印 8 00:00:25,690 --> 00:00:28,740 一些文字,然後運行該函數的增量,前 9 00:00:28,740 --> 00:00:30,540 印刷更多的文字。 10 00:00:30,540 --> 00:00:32,545 如果此功能才能正常運行,它會 11 00:00:32,545 --> 00:00:34,120 打印輸出x 2。 12 00:00:34,120 --> 00:00:35,370 讓我們試試吧。 13 00:00:38,870 --> 00:00:43,075 >> 所以,你可以看到,主並沒有做什麼我們所期望的。 14 00:00:43,075 --> 00:00:45,310 它返回的值為1,而 15 00:00:45,310 --> 00:00:47,150 比2我們的預期。 16 00:00:47,150 --> 00:00:50,060 這個錯誤的原因可以解釋的範圍。 17 00:00:50,060 --> 00:00:52,185 在功能上,主,我們初始化x 18 00:00:52,185 --> 00:00:53,820 僅在該函數。 19 00:00:53,820 --> 00:00:56,580 換言之,變量x被聲明內局部 20 00:00:56,580 --> 00:00:58,640 功能,主要的,並且是不能訪問 21 00:00:58,640 --> 00:01:00,210 以外的函數。 22 00:01:00,210 --> 00:01:03,580 只有主在這種情況下,可以訪問x。 23 00:01:03,580 --> 00:01:06,990 當我們調用增量,我們不傳遞X作為輸入,但 24 00:01:06,990 --> 00:01:08,960 僅僅是x的一個拷貝。 25 00:01:08,960 --> 00:01:11,640 由於這樣做的結果,該函數增量僅添加 26 00:01:11,640 --> 00:01:14,190 值1到x的值的副本。 27 00:01:14,190 --> 00:01:16,170 但不是X本身。 28 00:01:16,170 --> 00:01:19,090 當我們返回到主,X本身並沒有改變。 29 00:01:19,090 --> 00:01:22,370 因此,打印出x將只產生1的值。 30 00:01:22,370 --> 00:01:24,890 >> 好吧,那麼,留下了一個問題:我們應該如何解決 31 00:01:24,890 --> 00:01:26,230 這個功能嗎? 32 00:01:26,230 --> 00:01:29,500 一種解決方案是具有增量返回一個值。 33 00:01:29,500 --> 00:01:31,180 以這種方式,該函數增量 34 00:01:31,180 --> 00:01:33,350 給我們一個整數。 35 00:01:33,350 --> 00:01:35,420 因此,這裡是我們修改後的代碼與 36 00:01:35,420 --> 00:01:37,480 交替增加功能。 37 00:01:37,480 --> 00:01:41,510 在這裡,我們代替返回x + 1的,而不是剛結束 38 00:01:41,510 --> 00:01:44,070 x是等於到x + 1。 39 00:01:44,070 --> 00:01:46,290 另外,需要注意,我們更換的輸出 40 00:01:46,290 --> 00:01:49,630 增加,以前無效,用int,指出 41 00:01:49,630 --> 00:01:52,230 增量將傳回一個整數值。 42 00:01:52,230 --> 00:01:55,000 現在,增量運行後,它會返回值 43 00:01:55,000 --> 00:01:56,535 2,正是因為我們意。 44 00:01:59,630 --> 00:02:02,260 >> 另一種情況,演示了範圍的重要性 45 00:02:02,260 --> 00:02:04,860 是在scopeloop.c。 46 00:02:04,860 --> 00:02:07,320 在這段代碼中,我們有一個for循環中的變量 47 00:02:07,320 --> 00:02:10,310 總被初始化過程中的每一步。 48 00:02:10,310 --> 00:02:13,720 不幸的是,這段代碼無法編譯。 49 00:02:13,720 --> 00:02:16,690 這是因為實際不存在的變量total 50 00:02:16,690 --> 00:02:18,550 外的循環。 51 00:02:18,550 --> 00:02:21,000 循環內聲明的變量只存在於 52 00:02:21,000 --> 00:02:23,967 循環本身,並證明我們的錯誤 53 00:02:23,967 --> 00:02:25,880 消息,總申報。 54 00:02:25,880 --> 00:02:28,710 但要聲明範圍內的變量總有 55 00:02:28,710 --> 00:02:30,420 主要的功能。 56 00:02:30,420 --> 00:02:33,610 此外,在每一次迭代的循環,我們 57 00:02:33,610 --> 00:02:36,340 我們總被重新初始化為0。 58 00:02:36,340 --> 00:02:39,210 這本身並沒有使代碼進行編譯,但它 59 00:02:39,210 --> 00:02:42,920 防止總從不斷總結過去1的值。 60 00:02:42,920 --> 00:02:45,760 >> 同樣,什麼是最好的方式來解決這個問題呢? 61 00:02:45,760 --> 00:02:48,520 其中一個更容易的方法,包括總的本地 62 00:02:48,520 --> 00:02:51,990 的功能,主要的,而不是循環本身。 63 00:02:51,990 --> 00:02:55,210 這總要遞增,最終, 64 00:02:55,210 --> 00:02:57,880 允許它被印在for循環之後。 65 00:02:57,880 --> 00:03:00,093 另一種技術,我只簡要地總結一下 66 00:03:00,093 --> 00:03:02,190 是使用的全局變量。 67 00:03:02,190 --> 00:03:04,890 全局變量是變量的聲明之前,主要 68 00:03:04,890 --> 00:03:07,860 ,在整個程序中保持其價值。 69 00:03:07,860 --> 00:03:10,710 當然,功能可以改變一個全球性的, 70 00:03:10,710 --> 00:03:13,470 ,但他們不出去的範圍和局部變量一樣。 71 00:03:13,470 --> 00:03:15,880 然而,使用全局變量的傾向會讓人不悅 72 00:03:15,880 --> 00:03:18,180 不好的設計,因為有更好的方法時 73 00:03:18,180 --> 00:03:20,080 函數之間共享數據。 74 00:03:20,080 --> 00:03:21,920 例如,使用指針。 75 00:03:21,920 --> 00:03:24,250 但另一個時間。 76 00:03:24,250 --> 00:03:26,670 >> 最後,重要的是要了解的範圍 77 00:03:26,670 --> 00:03:29,550 的上下文中的計算機的存儲器中,或RAM。 78 00:03:29,550 --> 00:03:32,470 當我們執行一個程序時,局部變量和函數 79 00:03:32,470 --> 00:03:34,040 被添加到一個特定的位置,在 80 00:03:34,040 --> 00:03:36,010 RAM稱為堆疊。 81 00:03:36,010 --> 00:03:39,230 作為函數的返回值的變量,堆棧幀 82 00:03:39,230 --> 00:03:43,910 有效地去除從堆棧中釋放更多的內存。 83 00:03:43,910 --> 00:03:46,750 因此,在審查範圍內,一定要記住這三個 84 00:03:46,750 --> 00:03:47,980 關鍵點。 85 00:03:47,980 --> 00:03:51,220 一,範圍可以是本地或全局。 86 00:03:51,220 --> 00:03:53,990 這取決於聲明變量的位置。 87 00:03:53,990 --> 00:03:57,040 二,聲明或初始化函數中的​​變量 88 00:03:57,040 --> 00:03:59,510 本地的該功能,並且不能改變由其他 89 00:03:59,510 --> 00:04:02,790 功能,至少在沒有使用指針。 90 00:04:02,790 --> 00:04:05,340 最後,當變量也是局部的循環, 91 00:04:05,340 --> 00:04:06,490 內聲明的。 92 00:04:06,490 --> 00:04:08,100 變量是無法訪問 93 00:04:08,100 --> 00:04:09,860 以外的循環。 94 00:04:09,860 --> 00:04:11,170 >> 這就是現在範圍。 95 00:04:11,170 --> 00:04:12,420 感謝收看。