1 00:00:00,000 --> 00:00:05,300 2 00:00:05,300 --> 00:00:07,300 Doug LLOYD: Başlamadan gibi fonksiyonları ile çalışma, 3 00:00:07,300 --> 00:00:09,966 başka bir şey olmaya devam ediyor anlamak için gerçekten önemli, 4 00:00:09,966 --> 00:00:12,380 hangi değişken kapsamı kavramdır. 5 00:00:12,380 --> 00:00:14,490 Yani kapsamı bir Bir değişkenin özelliği 6 00:00:14,490 --> 00:00:18,860 Bu hangi fonksiyonlarından tanımlar bu değişken erişilebilir. 7 00:00:18,860 --> 00:00:24,595 >> C başlıca iki kapsamları vardır, Yerel değişkenler ve global değişkenler. 8 00:00:24,595 --> 00:00:27,830 Şimdi yerel değişkenler olabilir sadece fonksiyonlar içinde erişilebilir 9 00:00:27,830 --> 00:00:29,045 hangi onlar yarattı ediyoruz. 10 00:00:29,045 --> 00:00:32,170 Onlar her tarafından erişilemiyor Programda mevcut fonksiyonu, 11 00:00:32,170 --> 00:00:34,184 Sadece fonksiyon hangi oluşturuldu. 12 00:00:34,184 --> 00:00:36,350 Küresel değişkenler, Öte yandan, ulaşılabilir 13 00:00:36,350 --> 00:00:37,719 Programda herhangi bir fonksiyon tarafından. 14 00:00:37,719 --> 00:00:40,260 Ve bunun nedeni onlar içinde oluşturulan değil çünkü 15 00:00:40,260 --> 00:00:41,441 herhangi bir fonksiyon. 16 00:00:41,441 --> 00:00:43,690 Biz dışında onları bildirmek işlevlerin hepsi 17 00:00:43,690 --> 00:00:48,940 her fonksiyonu bilir nerede anlamına gelir o erişmek ve bunu işleyebilirsiniz. 18 00:00:48,940 --> 00:00:52,010 >> Şimdiye kadar ders oldukça ettik çok özel çalışıyor 19 00:00:52,010 --> 00:00:54,280 yerel değişkenler ile. 20 00:00:54,280 --> 00:00:58,320 Burada bir örnek çok var: Basit ana fonksiyonu ve çok basit 21 00:00:58,320 --> 00:01:00,680 biz yazdık ek fonksiyon. 22 00:01:00,680 --> 00:01:03,180 Bu durumda, x olduğu Ben sadece yeşil renkli ettik 23 00:01:03,180 --> 00:01:07,400 yerellik vurgulamak için veya Bu değişkenin kapsamı, 24 00:01:07,400 --> 00:01:09,240 üçlü işlevi yereldir. 25 00:01:09,240 --> 00:01:12,300 ana hiç x başvuruda bulunamaz. 26 00:01:12,300 --> 00:01:14,259 Bunun ne olduğunu bilmiyor. 27 00:01:14,259 --> 00:01:17,050 Başka hiçbir işlevi, aslında, biz ise Buraya ek işlevleri vardı 28 00:01:17,050 --> 00:01:19,360 x başvurabilecekler. 29 00:01:19,360 --> 00:01:23,520 >> Benzer şekilde, ben oldum hangi sonuçları mavi renkli, sadece ana kadar yereldir. 30 00:01:23,520 --> 00:01:26,980 Sadece ana bilir ne Değişken sonucudur. 31 00:01:26,980 --> 00:01:30,010 Üçlü kullanamazsınız. 32 00:01:30,010 --> 00:01:32,580 >> Şimdi de belirtildiği gibi, global değişkenler mevcut. 33 00:01:32,580 --> 00:01:35,575 Eğer bu değişken bildirirseniz Herhangi bir fonksiyonun dışında, 34 00:01:35,575 --> 00:01:38,290 tüm fonksiyonları Program kendisine başvurabilirsiniz. 35 00:01:38,290 --> 00:01:44,010 Yani bu durumda ben de vurguladık global bir değişken bildirimi yeşil. 36 00:01:44,010 --> 00:01:45,830 Bu durumda, Değişken varlık beyan 37 00:01:45,830 --> 00:01:48,720 yapman lazım, küresel denir bu konuda son derece açık olmak. 38 00:01:48,720 --> 00:01:49,720 Bu tip float olduğunu. 39 00:01:49,720 --> 00:01:52,940 Ve ben bunu değerini 0,5050 atayın. 40 00:01:52,940 --> 00:01:58,080 >> Siz ana ve fark edeceksiniz Üçlü, küresel başvurmak mümkün. 41 00:01:58,080 --> 00:02:03,480 Ve aslında, ben program sayesinde gidersem Ana İlk çağrıları üçlü belirtildiği gibi, 42 00:02:03,480 --> 00:02:10,440 3 ile küresel üçlü çarpma, hangi 1.5-şey onun değerini ayarlar, 43 00:02:10,440 --> 00:02:16,080 1.51 ya da buna benzer bir şey, ve sonra ana da değerini yazdırır 44 00:02:16,080 --> 00:02:16,620 küresel. 45 00:02:16,620 --> 00:02:24,424 0.5050 çıktı olmayacak şekilde ana, onu , 1.51 Küresel kez 3 yazdıracaktır. 46 00:02:24,424 --> 00:02:27,340 Yani dikkatli olmak lazım küresel değişkenler ile çalışıyoruz. 47 00:02:27,340 --> 00:02:30,260 Onlar çok esnek yaparken bilgi aktarmak için güçlü olmak 48 00:02:30,260 --> 00:02:32,650 yaklaşık, böylece, her işlevi kullanabilirsiniz, 49 00:02:32,650 --> 00:02:34,580 o da bazı olabilir tehlikeli sonuçlar 50 00:02:34,580 --> 00:02:38,770 bir fonksiyon değişiklikleri varsa Bir değişkenin değeri 51 00:02:38,770 --> 00:02:42,360 Beklediğiniz önce değiştirilmesi. 52 00:02:42,360 --> 00:02:44,200 >> Neden bu ayrım önemli? 53 00:02:44,200 --> 00:02:48,070 Neden umursuyorum bazı değişkenler olup olmadığını Yerel ve diğerleri küresel nelerdir? 54 00:02:48,070 --> 00:02:53,880 Peki, çoğunlukla, yerel değişkenler C değeri tarafından geçirilen denir ne olduğunu 55 00:02:53,880 --> 00:02:56,087 Biz bir işlev çağrısı yaparken. 56 00:02:56,087 --> 00:02:56,920 Bu ne anlama gelir? 57 00:02:56,920 --> 00:03:00,880 >> Peki, bir değişken geçtiğinde değeri, Aranan, tarafından hangi 58 00:03:00,880 --> 00:03:04,350 fonksiyonu demenin başka bir yoludur bu değişken aldığını 59 00:03:04,350 --> 00:03:08,465 girdi olarak geçirilen alır, aslında bu değişken kendisi almaz. 60 00:03:08,465 --> 00:03:12,490 Kendi aldığı Bunun kopyası ile çalışmak. 61 00:03:12,490 --> 00:03:14,350 Bu gerçekten önemli bir ayrımdır. 62 00:03:14,350 --> 00:03:18,250 Sadece bir saniye önce gördüm Global değişkenler o, 63 00:03:18,250 --> 00:03:23,240 küresel işlerseniz tek işlevi değişken, etkisi 64 00:03:23,240 --> 00:03:26,390 şöyle bir fonksiyon taşır her fonksiyonu sayesinde. 65 00:03:26,390 --> 00:03:28,920 >> Ama yerel değişkenler ile, bu doğru değil. 66 00:03:28,920 --> 00:03:32,060 Her fonksiyon ne zaman girdi olarak değişkenleri alır 67 00:03:32,060 --> 00:03:36,367 Bu değişkenlerin kopyalarını almak, değil değişkenlerin kendileri. 68 00:03:36,367 --> 00:03:37,825 Yani yan etkisi nedir? 69 00:03:37,825 --> 00:03:40,450 Bunun anlamı bu değişken olarak Arayan, fonksiyon o 70 00:03:40,450 --> 00:03:45,600 işlev çağrısını yapıyor, bir değişmeden bunu geçersiz sürece. 71 00:03:45,600 --> 00:03:50,420 >> Örneğin, bu kod foo hiç değişmez. 72 00:03:50,420 --> 00:03:55,450 Int foo 4 eşittir, üçlü çağrı foo, üçlü içinde, 73 00:03:55,450 --> 00:03:58,850 Biz o foo olur beklediğiniz 3 ile çarpılır ve iade edilmesi, 74 00:03:58,850 --> 00:04:01,450 ama aslında hiçbir etkisi yoktur. 75 00:04:01,450 --> 00:04:03,460 >> Burada olsa, çok ince bir fark. 76 00:04:03,460 --> 00:04:06,520 Bu bizim istediğimiz etkisi var. 77 00:04:06,520 --> 00:04:07,730 Neden görüyor musunuz? 78 00:04:07,730 --> 00:04:11,500 Biz ana bu süre içinde foo geçersiz ediyoruz. 79 00:04:11,500 --> 00:04:16,899 >> Yani int foo 4, foo eşittir üçlü foo, biz bu çağrıyı yaparken, 80 00:04:16,899 --> 00:04:21,680 Üçlü kendi kopyasını alır foo, 4 kendi kopyası. 81 00:04:21,680 --> 00:04:27,340 Bu ne 4 kez 3 veya iade diyor Değişken zamanlarda 3 iletilir. 82 00:04:27,340 --> 00:04:32,109 Ve sonra biz iade atamak Üçlü değeri tekrar foo. 83 00:04:32,109 --> 00:04:33,650 Yani bu aslında foo üzerine olacaktır. 84 00:04:33,650 --> 00:04:35,816 Bunu yapmanın tek yolu Yerel değişkeni ile bu. 85 00:04:35,816 --> 00:04:38,120 Yani şimdi biz başka eklerseniz Burada kod satırı 86 00:04:38,120 --> 00:04:40,870 Ana sonuna en , foo değerini yazdırmak 87 00:04:40,870 --> 00:04:45,030 aslında 12 üzerinden basacaktır. 88 00:04:45,030 --> 00:04:48,600 >> Değişken kapsamı genellikle Bir sorun çok değil 89 00:04:48,600 --> 00:04:51,190 Eğer tüm isim eğer senin değişkenler farklı şeyler. 90 00:04:51,190 --> 00:04:54,920 Ama kötü tür alabilirsiniz Aynı değişken adı ise 91 00:04:54,920 --> 00:04:58,820 çoklu fonksiyonları görünür, hangi bir sürü olur. 92 00:04:58,820 --> 00:05:02,130 Hiç işe yoksa Gerçek dünya nerede 93 00:05:02,130 --> 00:05:06,080 Eğer işbirlikçi üzerinde çalışıyoruz Farklı takımlarda programları ve insanlar 94 00:05:06,080 --> 00:05:11,000 Aynı yazmak için birlikte çalışıyor program veya programların aynı seti, 95 00:05:11,000 --> 00:05:13,900 sık sık değişken yeniden edeceğiz isimler, özellikle yaygın olanları 96 00:05:13,900 --> 00:05:18,020 böylece, x, y, i, j, ve benzerlerini içerir. 97 00:05:18,020 --> 00:05:20,370 >> Ama ne zaman değişkenlerin Aynı isim, kapsam sorunları 98 00:05:20,370 --> 00:05:23,080 biraz yanıltıcıdır ayrıştırmak için alabilirsiniz. 99 00:05:23,080 --> 00:05:26,790 Örneğin, biliyor musunuz ne basılmış olacaktır 100 00:05:26,790 --> 00:05:30,190 Bu özel programın sonunda? 101 00:05:30,190 --> 00:05:31,280 Bir dakikanızı ayırın. 102 00:05:31,280 --> 00:05:33,382 Videoyu duraklatmak ve okumak Bu program sayesinde. 103 00:05:33,382 --> 00:05:35,590 Üst biz de görebilirsiniz Bir fonksiyon beyanı var 104 00:05:35,590 --> 00:05:37,350 Arttırma adı verilen bir fonksiyon için. 105 00:05:37,350 --> 00:05:40,800 Bu işlev, tek bir sürer parametresi, biz x diyoruz bir tamsayı. 106 00:05:40,800 --> 00:05:42,610 Ve bu bir tamsayı verir. 107 00:05:42,610 --> 00:05:44,820 O başlangıçta dönüş türüdür. 108 00:05:44,820 --> 00:05:48,140 >> Sonra çizgilerin ana, bir çift var Ana kod, hangi son bir 109 00:05:48,140 --> 00:05:49,250 Baskı ifadedir. 110 00:05:49,250 --> 00:05:51,140 Ve burada bir soru, hatırlıyorum. 111 00:05:51,140 --> 00:05:54,240 Ne gerçekte olacak Bu fonksiyonun sonunda basılmış? 112 00:05:54,240 --> 00:05:58,110 Ve sonra biz aslında var Aşağıdaki artışı tanımı. 113 00:05:58,110 --> 00:06:01,760 >> Yani içinde adım, bir dakikanızı ayırın Kod, şeyler iz. 114 00:06:01,760 --> 00:06:08,100 En basılacaktır biliyor musunuz Bu özel program sonu? 115 00:06:08,100 --> 00:06:08,600 >> Pekala. 116 00:06:08,600 --> 00:06:11,433 Umarım, birkaç saniye geçtiniz denemek ve bu bir ayrıştırmak. 117 00:06:11,433 --> 00:06:13,370 Hadi beraber yapalım. 118 00:06:13,370 --> 00:06:16,022 >> Yani artış en üzerinde çarpı işareti var Orada üst kısmında beyan. 119 00:06:16,022 --> 00:06:17,230 Bu bir oyalama tür oldu. 120 00:06:17,230 --> 00:06:18,570 Kendi değişken değil. 121 00:06:18,570 --> 00:06:19,879 Kendi kapsamı bulunmamaktadır. 122 00:06:19,879 --> 00:06:21,920 Bu sadece bir işlev var beyanname, yani amaçlar için 123 00:06:21,920 --> 00:06:24,330 arasında ne olduğunu ayrıştırmak için çalışıyor Bu programda oluyor, 124 00:06:24,330 --> 00:06:26,660 Biz de sadece bunu önlemek olabilir. 125 00:06:26,660 --> 00:06:29,560 >> Şimdi bu durumda var, Bu sorunun zor nedeni 126 00:06:29,560 --> 00:06:34,030 Biz yerel değişkenler var çünkü Ana ve artım, hem her biri 127 00:06:34,030 --> 00:06:35,090 denilen x. 128 00:06:35,090 --> 00:06:39,830 Ve tabii ki bu konuda dönüm noktası olduğunu x değişti alır hangi süss çalışıyor 129 00:06:39,830 --> 00:06:41,890 ve nasıl değişti yok. 130 00:06:41,890 --> 00:06:46,900 Yani her örneği renkli ettik x ana kırmızı yerel olduğunu. 131 00:06:46,900 --> 00:06:52,040 Ve ben her örneği renkli ettik x mavi artırmak için yerel var. 132 00:06:52,040 --> 00:06:55,220 >> Üçüncü satırda Bildirimi main, y artış eşittir 133 00:06:55,220 --> 00:07:00,800 x Bu artış varlık değil geçmiş ana x veya kırmızı x. 134 00:07:00,800 --> 00:07:03,320 Bu bir kopyasını geçirilen alıyorum ediyor. 135 00:07:03,320 --> 00:07:06,987 Ve sadece çalışmak için gidiyor Bunun bu kopyası, mavi, x. 136 00:07:06,987 --> 00:07:08,820 Eğer matematiksel iseniz eğimli, sen belki 137 00:07:08,820 --> 00:07:14,230 Bunun yerine x alt olarak düşündüm artım ana ve alt x i m. 138 00:07:14,230 --> 00:07:15,700 Ama aynı fikir. 139 00:07:15,700 --> 00:07:18,999 x alt m veya x kırmızı Bir önceki slayt, 140 00:07:18,999 --> 00:07:21,790 local-- olan değişkenlerdir daha ziyade, x örneği 141 00:07:21,790 --> 00:07:26,900 Ana yerel ve x alt i veya Bir önceki slaytta mavi değişkenler, 142 00:07:26,900 --> 00:07:30,760 x örnekleri olduğunu artırmak için yerel. 143 00:07:30,760 --> 00:07:36,220 >> Yani, anlamaya başardık neler sonunda basılan bu fonksiyon? 144 00:07:36,220 --> 00:07:39,420 Ben Doug Lloyd değilim ve bu CS50 olduğunu. 145 00:07:39,420 --> 00:07:41,542