Даг Ллоид: Када почнете рад са функцијама,
Друга ствар ће постати веома важно да разумемо,
што је концепт променљиве обима.
Тако је обим Карактеристика променљиве
који дефинише од којих функција та променљива се може приступити.
>> Постоје два основна нишани у Ц, локалне променљиве и глобалне променљиве.
Сада, локалне променљиве могу само може приступити у оквиру функције
у којима они створили.
Они се не могу приступити сваки други функција која постоји у вашем програму,
само функција у која је створена.
Глобалне променљиве, на С друге стране, може се приступити
од било које функције у програму.
А разлог за то је јер не креирана унутар
од било које функције.
Ми их прогласи ван све функција које
значи да је свака функција зна где је и да приступите и манипулише.
>> До сада у току си лепа си много је искључиво ради
са локалних променљивих.
Ево пример веома, веома једноставна главна функција и врло једноставан
додатна функција које смо написали.
У овом случају, к, која Ја сам само зелене боје
да се истакне локалитет или обим тог променљиве,
локална функцији троструке.
маин не може односити на к уопште.
Не знам шта је то.
Ниједна друга функција, у ствари, ако Имао додатне функције овде,
могу односити на к.
>> Слично томе, резултати које имам плаве боје, локална само главни.
Само главни зна шта променљива резултат је.
трострука не могу да га користе.
>> Сада као што сам поменуо, глобалне променљиве постоје.
Ако прогласи ту променљиву изван било које функције,
све функције у Програм се може односити на њега.
Дакле, у овом случају сам истакао у зелена глобална променљива декларација.
У овом случају, променљива биће проглашен
се зове глобални, само да бити изузетно јасан о томе.
То је типа флоат.
И то доделити вредност 0.5050.
>> Приметићете да у главни и троструко, ја сам у стању да се односи на глобални.
А у ствари, ако одем кроз програм како је наведено, главни први позиви троструко,
трипле множи глобалне од 3, која поставља своју вредност 1,5-нешто,
1.51 или тако нешто, и затим главни и исписује вредности
глобалног.
Дакле, главни неће одштампати 0.5050 га, ће одштампати глобалне пута 3, 1,51.
Дакле, мораш бити опрезан када радите са глобалним варијабли.
Док су веома флексибилни у бити у стању да прође информације
око тако да свака Функција може користити,
такође може да имају неке опасне последице
ако се промени једна функција вредност променљиве
пре него што сте очекивали да буде промењен.
>> Зашто ова дистинкција битно?
Зашто нам је стало да неке варијабле локални и други су глобални?
Па, у највећем делу, локалне променљиве у Ц су оно што се зове доноси вредност
када правимо неку функцију позив.
Шта то значи?
>> Па, када је донет променљива од вредности, позивалац, који
је још један начин да се каже функције која прима променљиве које
бива усвојен као улаз, заправо не прима која се променљиву.
Она добија своју копију тога да радим.
Ово је заиста важна разлика.
Управо смо видели пре секунде да са глобалним варијабли,
ако манипулишу глобална променљива у једном функцији, ефекат
тиме што једна функција носи до сваке друге функције.
>> Али са локалних променљивих, то није истина.
Свака функција када га прима променљиве као улазни
добијају копије тих варијабли, не сами променљиве.
Дакле, шта је споредни ефекат тога?
То значи да је променљива у саговорник, функција која
је одлука функцију позив је непромењена, осим ако га замените.
>> На пример, у овом коду Фоо се не мења уопште.
Инт фоо једнако 4, позовите троструко од фоо, унутар троструко,
очекивали бисмо да би Фоо се помножи са 3 и вратио,
али заправо нема ефекта.
>> Овде ипак, веома суптилна разлика.
Ово има ефекат желимо.
Видите ли зашто?
Ми заобила`ењем фоо у главном овом тренутку.
>> Дакле, Инт Фоо једнако 4, Фоо једнако троструки Фоо, када правимо тај позив,
троструки добија своју копију од Фоо, својом копијом 4.
Каже се врате 4 пута 3, или како променљива буде усвојен у временима 3.
И онда смо доделили повратак вредност троструко да поново Фоо.
Дакле, ово би, заправо, преписати фоо.
То је једини начин да се ово са локалним променљиве.
Дакле, сада ако додамо још линија кода овде
на крају маин до одштампате вредност фоо,
то би у ствари одштампати 12.
>> Променљива Обим је генерално Не превише проблема
ако име све своје променљиве различите ствари.
Али то може добити врсту гадно ако у истом име променљиве
појављује у више функција, која ће се десити много.
Ако сте икада радим у стварни свет у којем
радите на заједнички програми и људи у различитих тимова
раде заједно да напише исто програм или иста скуп програма,
они често ће поново користити променљиву имена, посебно оне заједничке
као к, и, И, Ј, и тако даље.
>> Али када варијабле имају исти назив, обим питања
може бити мало компликованије да анализирам.
На пример, да ли знате шта ће бити одштампан
на крају овог конкретног програма?
Узмите мало.
Паусе видео и прочитао кроз овај програм.
Можете видети на врху смо ми има декларацију функције
за функцију која се зове прираст.
Та функција узима један параметар, цео број који зовемо к.
И то излази цео број.
То је повратни тип на почетку.
>> Онда имамо главни, пар редова кода у главни, последњи од којих
је изјава за штампање.
И запамтите, то је питање овде.
Шта је заправо ће бити штампан на крају ове функције?
И онда ми заправо имати дефиниција прираста испод.
>> Дакле, узмите мало, корак по код, траг ствари.
Да ли знате шта ће бити штампан у крај овом програму?
>> У реду.
Надам се, да сте узели неколико секунди да покушамо да анализирам ову.
Хајде да то урадимо заједно.
>> Тако сам прецртан прираштај је Декларација на врху тамо.
То је била нека врста ометања.
То није сама променљива.
То нема свој обим.
То је само функција декларација, тако и за потребе
да покушава да анализирам шта је догађа у овом програму,
могли бисмо само да избегнемо.
>> Сада имамо у овом случају, Разлог овај проблем је лукав
је јер имамо локалне променљиве у и главни и прираст, од којих је свака
је тзв х.
И наравно суштина овог питања је Покушавам да Сусс од којих ће се променити х
и како се променио.
Тако сам у боји сваком случају од к да је локална на главни ред.
И ја сам у боји сваки случај к да је локална за повећање плаво.
>> Обавештење у том трећем реду главних, једнако и пораст
к да повећање не буде прошло је главни х, или црвени х.
Постаје прошло копију.
И то ће само радити са да копију тога, плаве х.
Ако сте математички Склон, могао би
су уместо мислио о овоме као к суб м за главне и к додатно сам прираста.
Али то је иста идеја.
к додатно м, или црвени к је у претходном слајду,
су варијабле које су лоцал-- је инстанца к радије да
локална за главни, и к под ја, или плаве променљиве у претходни слајд,
су случајеви к да су локални за повећање.
>> Дакле, били сте у стању да схватим шта Ова функција штампан на крају?
Ја сам Доуг Лојд, а ово је ЦС50.