Даг Lloyd: Калі вы пачынаеце працы з функцыямі,
іншая справа, стане вельмі важна для разумення,
які з'яўляецца паняцце вобласці бачнасці зменных.
Так сфера з'яўляецца характарыстыка зменнай
які вызначае, якія функцыі з пераменная можа быць даступная.
>> Ёсць два асноўных абласцей у З, лакальныя зменныя і глабальныя зменныя.
Цяпер, лакальныя зменныя могуць толькі Доступ у функцыі
у якім яны створаны.
Яны не могуць быць даступныя кожны функцыя, якая існуе ў вашай праграме,
толькі функцыя ў якой яна была створана.
Глабальныя зменныя, на З іншага боку, можна атрымаць
любы функцыяй ў праграме.
І прычына ў тым, таму што яны не створаны ўнутры
любой канкрэтнай функцыі.
Мы аб'яўляем іх межамі усе функцыі, якія
азначае, што кожная функцыя ведае, дзе гэта і можа атрымаць доступ і маніпуляваць.
>> Да гэтага часу ў працэсе вы маеце даволі шмат працуе выключна
з лакальнымі зменнымі.
Вось прыклад вельмі, вельмі проста асноўная функцыя і вельмі просты
дадатковая функцыя, якую мы напісалі.
У гэтым выпадку X, які Я толькі зялёнага колеру
каб падкрэсліць размяшчэнне або аб'ём гэтай зменнай,
з'яўляецца лакальнай для функцыі патройны.
галоўным чынам, не можа спасылацца на х наогул.
Ён не ведае, што гэта такое.
Няма іншай функцыі, на самай справе, калі мы былі дадатковыя функцыі тут,
можа ставіцца да х.
>> Сапраўды гэтак жа, прыводзіць, якія я сіняга колеру, толькі лакальна на галоўную.
Толькі галоўны ведае, што пераменная вынік.
патройны не можа яго выкарыстоўваць.
>> Цяпер, як я ўжо казаў, глабальныя зменныя існуюць.
Калі вы аб'яўляеце зменную, што па-за якой-небудзь функцыі,
усе функцыі ў Праграма можа звяртацца да яго.
Такім чынам, у гэтым выпадку я вылучыў у зялёны глабальная пераменная дэкларацыі.
У гэтым выпадку, Пераменная аб'яўляецца
называецца глабальнай, проста быць вельмі ясна пра гэта.
Гэта тыпу паплаўка.
І я прысвоіць яму значэнне 0.5050.
>> Вы заўважыце, што ў асноўнай і ў патройны, я магу звярнуцца да глабальных.
І на самай справе, калі я іду па праграме як паказана, асноўныя выклікі першыя патройны,
трехместные размнажаецца глабальныя па 3, якія ўсталёўвае яго значэнне ў 1,5-то,
1.51 ці нешта падобнае, і Затым галоўны таксама выводзіць значэнне
глабальнага.
Так галоўным чынам, не будзе друкаваць 0.5050 яго, выведзе глабальныя раз 3, 1,51.
Такім чынам, вы павінны быць асцярожныя, калі Вы працуеце з глабальнымі зменнымі.
У той час як яны вельмі гнуткія ў будучы ў стане перадаць інфармацыю
вакол так, што кожны Функцыя можа выкарыстоўваць яго,
ён таксама можа мець некаторыя небяспечныя наступствы
калі змены адной функцыі значэнне зменнай
перш чым чакаць, што яна будзе зменена.
>> Чаму гэта адрозненне мае значэнне?
Чаму мы клапоцімся Ці некаторых зменных мясцовыя і іншыя глабальныя?
Ну, па большай частцы, лакальныя зменныя ў C гэта тое, што называецца перадаюцца па значэнні
калі мы выклік функцыі.
Што гэта азначае?
>> Добра, калі перадаецца пераменная па значэнні, выкліканага, які
гэта яшчэ адзін спосаб сказаць функцыі што атрымлівае зменную,
атрымлівае прыняты ў якасці ўваходных дадзеных, на самай справе ня атрымаць саму гэтую зменную.
Ён атрымлівае уласны Копія гэтага працаваць.
Гэта сапраўды важнае адрозненне.
Мы толькі што бачылі секунду назад што з глабальнымі зменнымі,
калі мы маніпуляваць сусветнай пераменная ў адной функцыі, эфект
у тым, што адна функцыя ажыццяўляе да любой іншай функцыі.
>> Але з лакальнымі зменнымі, што гэта не так.
Кожная функцыя, калі яго атрымлівае ў якасці ўваходных зменных
атрымліваць копіі гэтых зменных, а не самі зменныя.
Так што гэта пабочны эфект, што?
Гэта азначае, што пераменная ў абанент, функцыя,
гэта робіць выклік функцыі, з'яўляецца без змен, калі вы не зменіце яго.
>> Напрыклад, у гэтым кодзе Foo не змяніўся.
Int Foo роўны 4, тэлефануйце патройны абуўшы, ўнутры патройны,
можна чакаць, што Foo будзе памножыць на 3 і вяртаецца,
але няма на самай справе ніякага эфекту.
>> Тут, хоць, вельмі тонкае адрозненне.
Гэта мае эфект мы хочам.
Вы бачыце, чаму?
Мы пераазначэння Foo ў галоўным гэты час.
>> Так INT Foo роўны 4, Foo роўны патройны Foo, калі мы зрабіць гэты заклік,
патройны атрымлівае сваю ўласную копію абуўшы, сваёй копіяй 4.
Гэта сведчыць вярнуцца 4 разы 3, або любы Пераменная атрымлівае прайшло ў часы 3.
І тады мы прызначаем вяртанне Значэнне патройны Foo зноў.
Так што гэта на самай справе будзе перапісаць Foo.
Гэта адзіны спосаб зрабіць гэта з лакальнай зменнай.
Так што цяпер, калі мы дадамо яшчэ адзін радок кода тут
У канцы галоўнай да раздрукаваць значэнне Foo,
было б на самой справе раздрукаваць 12.
>> Вобласць бачнасці зменнай, як правіла, не надта вялікая праблема
калі вы назваць усе вашы зменныя розныя рэчы.
Але ён можа атрымаць від адваротны калі ж імя зменнай
з'яўляецца ў некалькіх функцый, што адбудзецца шмат.
Калі вы калі-небудзь працаваць у рэальны свет, дзе
Вы працуеце на сумеснай праграмы і людзі ў розных камандах
працуюць разам, каб напісаць тое ж самае праграма або жа набор праграм,
яны часта паўторна зменную імёны, у прыватнасці, агульныя,
як х, у, I, J, і гэтак далей.
>> Але калі зменныя маюць тое ж самае імя, пытанні сферы ўжывання
можа атрымаць крыху больш складана для аналізу.
Напрыклад, вы ведаеце, што б быць раздрукаваныя
У канцы гэтай праграме?
Спыніцеся на хвілінку.
Паўза відэа і чытаць з дапамогай гэтай праграмы.
Вы можаце ўбачыць на версе мы ёсць функцыя дэкларацыю
для выкліку функцыі прырашчэння.
Гэтая функцыя прымае адзін Параметр, цэлы лік, якое мы называем х.
І гэта выводзіць цэлы лік.
Гэта тып якое вяртаецца ў пачатку.
>> Тады ў нас ёсць галоўны, некалькі радкоў кода ў асноўны, апошні з якіх
гэта аператар друку.
І памятайце, што гэта пытанне тут.
Што на самой справе адбываецца, каб быць друкуецца ў канцы гэтай функцыі?
І тады мы на самай справе ёсць Вызначэнне прыросту ніжэй.
>> Так што бярыце хвіліну, пакрокава код, прасачыць рэчы.
Вы ведаеце, што будзе надрукавана ў канец гэтай праграме?
>> Добра.
Спадзяюся, вы ўзялі некалькі секунд каб паспрабаваць разабраць гэты адзін з.
Давайце зробім гэта разам.
>> Так што я выкрасліў прырашчэнне-х Заяву на вяршыні там.
Гэта быў свайго роду адцягнення.
Гэта не яго ўласнай зменнай.
Ён не мае сваю вобласць прымянення.
Гэта проста функцыя Дэкларацыя, так і для мэтаў
у спробе разабраць тое, што што адбываецца ў гэтай праграме,
мы маглі б таксама проста пазбягаць яго.
>> Цяпер мы маем у гэтым выпадку Прычына гэтая праблема з'яўляецца складаным
таму, што мы мець лакальныя зменныя ў і асноўны і прырашчэнне, кожны з якіх
Называецца х.
І, вядома, сутнасць гэтага пытання спрабуючы даведацца, якія змянілі х атрымлівае
і як гэта атрымаць змянілася.
Так што я афарбаваны кожны асобнік х гэта мясцовы да асноўнага чырвоны.
І я каляровы кожны асобнік х гэта лакальная для павелічэння сіні.
>> Звярніце ўвагу на тое трэцяй лініі з асноўнай, у роўны прырашчэнне
х, што прырашчэнне не будучы Прайшло х Майне, ці чырвоны крыжык.
Гэта становіцца прайшоў копію.
І гэта будзе толькі працаваць з што яго копія, сіні х.
Калі вы матэматычна схільныя, вы, магчыма,
замест гэтага думаў пра гэта, як суб х м для асноўнага і х Sub Я для прырашчэння.
Але гэта тая ж ідэя.
х суб м, ці чырвоны іксы ў папярэднім слайдзе,
з'яўляюцца зменнымі, якія local-- з'яўляецца асобнікам х, а што
з'яўляецца лакальнай для асноўнай, і х я на поўдзень, або блакітныя зменныя ў папярэднім слайдзе,
з'яўляюцца выпадкі х, што тутэйшыя для павелічэння.
>> Так, вы змаглі высветліць, што гэтая функцыя надрукаваная ў канцы?
Я Дуг Лойд, і гэта CS50.