DOUG LLOYD: Kiel vi komencas laborante kun funkcioj, alia afero tuj fariĝis vere grave kompreni, kiu estas la koncepto de ŝanĝiĝema amplekso. Do amplekso estas karakteriza de variablo kiu difinas de kiu funkcioj ke variablo povas esti alirita. Ekzistas du primaraj medioj en C, lokaj variabloj kaj tutmondaj variabloj. Nun, lokaj variabloj povas nur esti alirita ene la funkcioj en kiu ili estas kreitaj. Ili ne povas esti alirita de ĉiu alia funkcio kiu ekzistas en via programo, nur la funkcio en kiu ĝi estis kreita. Mallokajn variablojn, sur la Aliflanke, povas esti alirita de iu funkcio en la programo. Kaj la kialo estas ĉar ili ne kreis interne de iu aparta funkcio. Ni deklaras ilin ekster ĉiuj de la funkcioj, kiujn signifas ke ĉiu funkcio scias kie estas kaj povas aliri kaj manipuli ĝin. Ĝis nun en la kurso vi havas belajn multe laboris ekskluzive kun lokaj variabloj. Jen ekzemplo de tre, tre simpla ĉefan funkcion kaj tre simpla aldona funkcio kiun ni skribis. En tiu kazo, x, kiu Mi koloraj verdaj nur reliefigi la loko aŭ la amplekso de tiu variablo, estas loka al la funkcio triobla. ĉefa ne povas rilati al x ajn. Ĝi ne scias kion estas. Neniu alia funkcio, fakte, se ni havis aldonaj funkcioj en ĉi tie, povus rilati al x. Simile, rezultoj kiujn mi havas kolorigita blua, estas lokaj nur al ĉefa. Nur ĉefan scias kion la rezulto estas ŝanĝiĝema. triobla ne povas uzi ĝin. Nun kiel mi menciis, tutmonda variabloj ja ekzistas. Se vi deklaras ke ŝanĝiĝema eksteren de ajna funkcio, ĉiuj de la funkcioj en la programo povas referi al ĝi. Do ĉi-kaze mi reliefigis en verda tutmonda variablo deklaro. En tiu kazo, la ŝanĝiĝema estulo deklaris nomata tutmonda, nur por esti ege klara pri tio. Ĝi estas de tipo float. Kaj mi atribui al ĝi la valoron 0,5050. Vi rimarkos ke en ĉefa kaj en triobla, Mi povas rilati al tutmonda. Kaj fakte, se mi iros tra la programo kiel indikita, ĉefaj unuaj alvokoj triobla, triobla multiplikas tutmonda per 3, kiu fiksas ĝian valoron al 1.5-io, 1.51 aŭ io simila, kaj tiam ĉefa ankaŭ presas la valoron de tutmondaj. Do ĉefa ne elprinti 0,5050, ĝi presos tutmonda tempoj 3, 1.51. Do vi devas esti zorgema kiam vi laboras kun tutmondaj variabloj. Dum ili estas tre flekseblaj en povante pasi informo ĉirkaŭe tiel, ke ĉiu funkcion povas uzi ĝin, ĝi ankaŭ povas havi iun danĝeraj konsekvencoj se unu funkcio ŝanĝoj la valoro de variablo antaŭ vi atendas ĝin esti ŝanĝita. Kial tiu distingo gravas? Kial ni zorgas ĉu iuj variabloj estas lokaj kaj aliaj estas tutmonda? Nu, plejparte, lokaj variabloj en C estas kio nomiĝas preteriris valoro kiam ni faras funkcio nomita. Kion tio signifas? Nu, kiam variablo estas pasita per valoro, la callee, kiu estas alia maniero diri la funkcio kiu ricevas la variablo kiu gets pasis en kiel enigaĵoj, ĝi reale ne ricevas ke variablo mem. Ĝi ricevas lian propran kopio por labori kun. Jen vere grava distingo. Ni ĵus vidis sekundo antaŭ ke kun tutmonda variabloj, se ni manipulas la tutmonda ŝanĝiĝema en funkcio, la efekto en tiu funkcio portas tra al ĉiu alia funkcio. Sed kun lokaj variabloj, tio ne veras. Ĉiu funkcio kiam ricevas variabloj kiel enigo ricevi kopiojn de tiuj variabloj, Ne la variabloj mem. Do kio estas la kromefikon de tio? Tio signifas ke la variablo en la telefonanto, la funkcio kiu estas farante la funkcio alvoko, estas senŝanĝa krom se vi nuligi ĝin. Ekzemple, en tiu kodo umo ne ŝanĝis tute. Int foo egalas 4, voki triobla de umo, ene de triobla, ni atendus ke umo estus esti multiplikita de 3 kaj rehejmigxis sed estas vere neniu efiko. Jen tamen, tre subtila diferenco. Tiu faras havi la efekton ni volas. Ĉu vi komprenas kial? Ni supera foo en ĉefaj tiu tempo. Do int foo egalas 4, umo egalas triobla umo, kiam ni faros tiu alvoko, triobla ricevas sian propran kopion de umo, lia propra kopio de 4. Ĝi diras reveni 4 fojoj 3, aŭ kion ajn ŝanĝiĝema gets pasis en tempoj 3. Kaj tiam ni atribui la reveno valoron de triobla al Foo denove. Do tiu fakte estus anstataŭigi umo. Tiu estas la sola maniero fari tiu kun loka variablo. Do nun, se ni aldonas alian linio de kodo tie fine de ĉefa por presi la valoro de foo, ĝi fakte presi 12. Ŝanĝiĝema amplekso estas ĝenerale ne tro multe de problemo se vi nomu ĉiujn viajn variabloj malsamaj aferoj. Sed ĝi povas akiri ia aĉa se la sama variablo nomo aperas en multnombraj funkcioj, kio okazos multe. Se vi iam ja laboras en la reala mondo, kie vi laboras en kunlabora programoj kaj homoj en malsamaj teamoj laboras kune skribi la saman programo aŭ la sama aro de programoj, ili devos ofte reuzas ŝanĝiĝema nomoj, aparte komunaj kiel x, y, i, j, kaj tiel plu. Sed kiam variabloj havas la sama nomo, amplekso temoj povas akiri iom pli delikata analizi. Ekzemple, ĉu vi scias kio estus presita eksteren ĉe la fino de ĉi tiu aparta programo? Prenu unu minuto. Paŭzi la videon kaj legis tra ĉi tiu programo. Vi povas vidi ĉe la supro ni havas funkcion deklaro por funkcio nomita pliigo. Ke funkcio prenas sola parametro, entjero kiu ni nomas x. Kaj ĝi eligas entjero. Tio estas la reveno tipo en la komenco. Tiam ni havas ĉefan, paro de linioj de kodo en ĉefa, la lasta de kiuj Estas print instrukcio. Kaj memoru, ke estas la demando ĉi tie. Kio estas efektive tuj estos presita ĉe la fino de ĉi tiu funkcio? Kaj tiam ni efektive havas la difino de pliigo sube. Do prenu minuton, paŝi tra la kodo, spuri aferojn. Ĉu vi scias kio estos presita ĉe Fine de ĉi tiu aparta programo? Bone. Espereble, vi jam prenitaj kelkaj sekundoj provi kaj analizi ĉi tiun. Ni faru tion kune. Do mi forstrekis pliigo la deklaracio ĉe la pinto. Estis speco de distro. Ĝi ne estas lia propra variablo. Ĝi ne havas lian propran medion. Estas nur funkcio deklaro, do por celoj provi analizi kion estas okazas en tiu programo, ni povus tiel simple eviti ŝin. Nun ni havas en ĉi tiu kazo, la Tial ĉi tiu problemo estas malfacila CXar ni lokaj variabloj en tiel ĉefaj pliigo, ĉiu el kiuj estas nomata x. Kaj kompreneble la quid de tiu afero estas provas süß el kiu x iĝas ŝanĝita kaj kiel ĝi get ŝanĝis. Do mi koloraj ĉiu okazo de x kiu estas loka al ĉefa ruĝa. Kaj mi koloraj ĉiu petskribo de x tio lokaj pliigo blua. Avizo en tiu tria linio de ĉefa, y egalas pliigo x, ke pliigo ne estanta pasis ĉefa x, aŭ la ruĝa x. Ĝi estas akiranta pasis kopion de ĝi. Kaj ĝi estas nur tuj labori kun ke kopion de tio, la blua x. Se vi estas matematike ema, vi eble ili anstataŭe pripensis tion kiel x sub- m por ĉefa kaj x sub- i por pliigo. Sed estas la sama ideo. x sub m, aŭ la ruĝan X en la antaŭa glitejo, estas la variabloj kiuj estas local-- estas la petskribo de x prefere ke estas loka al ĉefa, kaj x sub i, aŭ la bluaj variabloj en la antaŭa glitejo, estas la petskriboj de x kiu estas lokaj pliigo. Do, vi estis kapabla kalkuli ekstere kion tiu funkcio presita ĉe la fino? Mi Doug Lloyd, kaj ĉi tiu estas CS50.