1 00:00:07,150 --> 00:00:08,850 [Powered by Google Translate] DAVID DICIURCIO: Do grava koncepto por kompreni en 2 00:00:08,850 --> 00:00:11,010 programado estas la nocio de medio. 3 00:00:11,010 --> 00:00:13,860 Medio povas esti difinita kiel la kunteksto en kiu variablo estas 4 00:00:13,860 --> 00:00:15,610 videbla aŭ alirebla. 5 00:00:15,610 --> 00:00:18,150 Ekzemple, ni diras, ke ni havas funkcion, ĉefa, tio estas 6 00:00:18,150 --> 00:00:22,570 supozas pliigo variablo, x, de unu al du. 7 00:00:22,570 --> 00:00:25,690 Kiel ni povas vidi, ĉefa inicializa x al unu, presas 8 00:00:25,690 --> 00:00:28,740 iun tekston, tiam kuras la funkcio pliigo, antaŭ 9 00:00:28,740 --> 00:00:30,540 presi tekston. 10 00:00:30,540 --> 00:00:32,545 Se ĉi tiu funkcio estis por kuri ĝuste, ĝi estus 11 00:00:32,545 --> 00:00:34,120 presi x kiel 2. 12 00:00:34,120 --> 00:00:35,370 Ni provu ĝin. 13 00:00:38,870 --> 00:00:43,075 >> Do, kiel vi povas vidi, ĉefa ne faras tion, kion ni atendas. 14 00:00:43,075 --> 00:00:45,310 Ĝi redonas la valoron 1, prefere 15 00:00:45,310 --> 00:00:47,150 ol la 2 ni atendis. 16 00:00:47,150 --> 00:00:50,060 La kialo por tiu eraro povas klarigi por atingo. 17 00:00:50,060 --> 00:00:52,185 En la funkcio, ĉefa, ni inicializado x 18 00:00:52,185 --> 00:00:53,820 nur ene de la funkcio. 19 00:00:53,820 --> 00:00:56,580 En aliaj vortoj, la variablo x estas deklarita loke ene de la 20 00:00:56,580 --> 00:00:58,640 funkcio, ĉefa, kaj ne estas atingebla 21 00:00:58,640 --> 00:01:00,210 eksteren de la funkcio. 22 00:01:00,210 --> 00:01:03,580 Nur ĉefa povas aliri x en ĉi tiu situacio. 23 00:01:03,580 --> 00:01:06,990 Kiam ni nomas pliigo ni ne pasas x kiel la enigo, sed 24 00:01:06,990 --> 00:01:08,960 nur kopion de x. 25 00:01:08,960 --> 00:01:11,640 Kiel rezulto de tio, la funkcio pliigo nur aldonas 26 00:01:11,640 --> 00:01:14,190 la valoro 1 al kopio de la valoro de x. 27 00:01:14,190 --> 00:01:16,170 Sed ne al x sin. 28 00:01:16,170 --> 00:01:19,090 Kiam ni revenos al ĉefa, x mem ne ŝanĝis tute. 29 00:01:19,090 --> 00:01:22,370 Do presi el x nur liveri la valoron de 1. 30 00:01:22,370 --> 00:01:24,890 >> Nu, tiam kiu lasas la demandon: kiel ni ripari 31 00:01:24,890 --> 00:01:26,230 ĉi tiu funkcio? 32 00:01:26,230 --> 00:01:29,500 Unu solvo estas havi pliigo resendas valoron. 33 00:01:29,500 --> 00:01:31,180 En ĉi tiu maniero, la funkcio pliigo volo 34 00:01:31,180 --> 00:01:33,350 doni al ni reen entjero. 35 00:01:33,350 --> 00:01:35,420 Do jen nia reviziita kodo kun la 36 00:01:35,420 --> 00:01:37,480 alterna pliigo funkcio. 37 00:01:37,480 --> 00:01:41,510 Tie, ni anstataŭ revenis la x + 1, anstataŭ nur fino 38 00:01:41,510 --> 00:01:44,070 kun x esti egala al x + 1. 39 00:01:44,070 --> 00:01:46,290 Ankaŭ, prenu rimarki ke ni anstataŭis la eligo de 40 00:01:46,290 --> 00:01:49,630 pliigo, antaŭe neniigas, kun int, asertante ke 41 00:01:49,630 --> 00:01:52,230 pliigo nun pasi reen entjero valoro. 42 00:01:52,230 --> 00:01:55,000 Nun, post pliigo runs, ĝi revenos kun valoro de 43 00:01:55,000 --> 00:01:56,535 2, ĝuste kiel ni intencis. 44 00:01:59,630 --> 00:02:02,260 >> Alia situacio kiu pruvas atingo de graveco 45 00:02:02,260 --> 00:02:04,860 estas en scopeloop.c. 46 00:02:04,860 --> 00:02:07,320 En ĉi tiu kodo, ni havas por buklo en kiu la variablo 47 00:02:07,320 --> 00:02:10,310 entute estas inicializado dum ĉiu paŝo. 48 00:02:10,310 --> 00:02:13,720 Bedaŭrinde, ĉi tiu kodo ne kompili. 49 00:02:13,720 --> 00:02:16,690 Ĉi tiu estas ĉar la variablo tuta fakte ne ekzistas 50 00:02:16,690 --> 00:02:18,550 ekster la por buklo. 51 00:02:18,550 --> 00:02:21,000 Variabloj deklaritaj en bukloj nur ekzistas ene de la 52 00:02:21,000 --> 00:02:23,967 buklo mem kaj estas pruvita en nia eraro 53 00:02:23,967 --> 00:02:25,880 mesaĝon, entute ne deklarita. 54 00:02:25,880 --> 00:02:28,710 La variablo tuta ankoraŭ ne deklaris ene de la medio 55 00:02:28,710 --> 00:02:30,420 de la funkcio main. 56 00:02:30,420 --> 00:02:33,610 Plue, dum ĉiu ripeto de nia por ciklo, ni 57 00:02:33,610 --> 00:02:36,340 estas reinitializing nia tota al 0. 58 00:02:36,340 --> 00:02:39,210 Tiu mem ne observas la kodon de kompili, sed 59 00:02:39,210 --> 00:02:42,920 neebligus tuta de eterne sumanta al valoro pasintaj 1. 60 00:02:42,920 --> 00:02:45,760 >> Denove, kio estas la plej bona maniero por fiksi ĉi tion? 61 00:02:45,760 --> 00:02:48,520 Unu el la pli facile metodoj inkludas farante tuta loka al 62 00:02:48,520 --> 00:02:51,990 la funkcio, ĉefa, anstataŭ al la buklo mem. 63 00:02:51,990 --> 00:02:55,210 Tio plena por fakte pliigo, kaj finfine, 64 00:02:55,210 --> 00:02:57,880 permesas presi post la por buklo. 65 00:02:57,880 --> 00:03:00,093 Alia tekniko, kiun mi faros nur mallonge resumi would 66 00:03:00,093 --> 00:03:02,190 esti la uzado de tutmonda variabloj. 67 00:03:02,190 --> 00:03:04,890 Suma variabloj estas variabloj kiuj deklaris antaŭ ĉefaj 68 00:03:04,890 --> 00:03:07,860 kiuj subtenas lian valoron tra la tuta programo. 69 00:03:07,860 --> 00:03:10,710 Kompreneble, funkcioj povas ŝanĝi la valoron de tutmonda, 70 00:03:10,710 --> 00:03:13,470 sed ili ne eliru el medio kiel loka variabloj. 71 00:03:13,470 --> 00:03:15,880 Tamen, uzante tutmonda variabloj inklinas esti malaprobita 72 00:03:15,880 --> 00:03:18,180 sur tiel malbona dezajno, pro tio ke estas pli bonaj manieroj de 73 00:03:18,180 --> 00:03:20,080 dividi datumojn inter funkcioj. 74 00:03:20,080 --> 00:03:21,920 Ekzemple, uzante punteros. 75 00:03:21,920 --> 00:03:24,250 Sed pli en tiu alia tempo. 76 00:03:24,250 --> 00:03:26,670 >> Fine, estas grave havi komprenon de medio 77 00:03:26,670 --> 00:03:29,550 en la kunteksto de la komputilo memoro, aŭ RAM. 78 00:03:29,550 --> 00:03:32,470 Kiam ni ekzekuti programon, lokaj variabloj kaj funkcioj 79 00:03:32,470 --> 00:03:34,040 aldonas al specifa loko en la 80 00:03:34,040 --> 00:03:36,010 RAM nomis la stako. 81 00:03:36,010 --> 00:03:39,230 Kiel funkcioj reveno, la stako kadroj de la variabloj estas 82 00:03:39,230 --> 00:03:43,910 efektive forigita de la pilo liberigante pli memoro. 83 00:03:43,910 --> 00:03:46,750 Do kiam revizii medion, certigu vi memoras tiujn tri 84 00:03:46,750 --> 00:03:47,980 ŝlosilaj punktoj. 85 00:03:47,980 --> 00:03:51,220 Unu, amplekso povas esti ĉu loka aŭ tutmonda. 86 00:03:51,220 --> 00:03:53,990 Ĝi dependas de kie la variablo estas deklarita. 87 00:03:53,990 --> 00:03:57,040 Du, variabloj deklaris aŭ inicializado en funkcioj estas 88 00:03:57,040 --> 00:03:59,510 lokaj al tiu funkcio kaj ne povas esti ŝanĝita de aliaj 89 00:03:59,510 --> 00:04:02,790 funkcioj, almenaŭ ne sen uzi punteros. 90 00:04:02,790 --> 00:04:05,340 Fine, variabloj estas ankaŭ loka al maŝojn kiuj estas 91 00:04:05,340 --> 00:04:06,490 deklaris ene. 92 00:04:06,490 --> 00:04:08,100 La variabloj estas ne atingebla 93 00:04:08,100 --> 00:04:09,860 eksteren de la ciklo. 94 00:04:09,860 --> 00:04:11,170 >> Tio estas ĉio por nun medion. 95 00:04:11,170 --> 00:04:12,420 Dankon pro rigardante.