Даг LLOYD: Како да започнете работа со функции,
Друга работа е што се случува да стане навистина важно да се разбере,
кој е концептот на опсег на променливите.
Така опсегот е карактеристика на променлива
со кој се дефинираат од кои функции таа променлива може да се пристапи.
>> Постојат две основни домет во C, локални променливи и глобални променливи.
Само сега, локални променливи можат да се пристапи во рамките на функциите
во која тие се создадени.
Тие не може да се пристапи од страна на сите други функција која постои во вашата програма,
само функцијата во каде што е снимена.
Глобални променливи, на Од друга страна, може да се пристапи
од која било функција во програмата.
А причина за тоа е затоа што не си се создава во
од која било поединечна функција.
Ние ги декларираат надвор од сите функции, кои
значи дека секоја функција знае каде е тоа и да пристапите и да го манипулираат.
>> Досега во текот сте прилично многу работи исклучиво
со локални променливи.
Еве еден пример на многу, многу едноставна главната функција и многу едноставна
дополнителна функција која сум напишал.
Во овој случај, X, којшто Јас сум само обоена со зелена боја
да се потенцира на локалитетот или опфатот на таа променлива,
е локално до тројна функција.
Главната не може да се однесуваат на x на сите.
Што не знае што е тоа.
Нема друга функција, всушност, ако ние имаше дополнителни функции во тука,
би можеле да се однесуваат на x.
>> Слично на тоа, резултатите што сум сина боја, е локалната само на главните.
Само главните знае што Резултатот е променлива.
трокреветни не можат да го користат.
>> Сега како што споменав, глобални променливи постојат.
Ако се изјасни дека променливата надвор од било која функција,
сите функции во Програмата може да се однесува на него.
Значи во овој случај јас сум нагласени во зелени глобалната променлива декларација.
Во овој случај, променлива да се прогласат
се нарекува глобален, само за да биде исклучително јасни околу тоа.
Тоа е од типот плови.
И јас тоа го доделите вредност 0,5050.
>> Ќе забележите дека во главната и во трокреветни, јас сум во можност да се однесуваат на глобални.
И всушност, ако одам преку програмата како што е наведено, главната првите повици трокреветни,
трокреветни множи глобална страна 3, кој поставува неговата вредност на 1,5-нешто,
1,51 или нешто слично, и а потоа, исто така, главната отпечатоци од вредност
на глобални.
Значи главната нема да печати од 0,5050 тоа, ќе печати од глобалната пати 3, 1.51.
Па имаш да се биде внимателен кога си работат со глобални променливи.
Додека тие се многу флексибилни во да се биде во можност да помине информации
околу, така што секој Функцијата може да го користат,
Таа, исто така може да има некои опасни последици
ако промените една функција на вредноста на променлива
пред да се очекува тоа да се промени.
>> Зошто оваа разлика е важно?
Зошто ни е грижа дали некои променливи се локални и други се глобални?
Па, во најголем дел, локални променливи во C се она што се нарекува усвоен од вредност
кога ќе го направи повик на функција.
Што значи тоа?
>> Па, кога променлива е предадена од вредност, callee, која
е уште еден начин да се каже на функцијата дека е приемот на променлива која
ќе поминуваат во како влог, тоа всушност не добива дека самата променлива.
Тоа добива свој копија од него да се работи со.
Ова е навистина важна разлика.
Ние само видов пред една секунда дека со глобални променливи,
ако се манипулира со глобалната променлива во една функција, ефектот
со тоа, што една функција носи во текот на секоја друга функција.
>> Но со локални променливи, тоа не е точно.
Секоја функција, кога станува добива варијабли како влез
добијат копии од овие променливи, не самите променливи.
Значи она што е пропратен ефект на тоа?
Тоа значи дека на променливата во повикувачот, функцијата која
е правење на повик на функција, е непроменети, освен ако не се вратиш назад.
>> На пример, во овој код foo не се променети.
Int foo е еднакво на 4, јавете се трокреветни на foo, во внатрешноста на трокреветни,
што би се очекувало дека би foo се множи со 3 и се врати,
но има всушност нема никаков ефект.
>> Тука, секако, многу суптилна разлика.
Ова има ефект во смисла што го сакаме.
Гледате ли зошто?
Ние сме исклучително важни foo во главната тоа време.
>> Па int foo е еднакво на 4, foo е еднаква трокреветни foo, кога ќе го направи тој повик,
трокреветни добива свој примерок на foo, свој примерок од 4.
Таа вели дека се вратат 4 пати 3, или што променлива ќе поминуваат во 3 пати.
А потоа ние му ја додели на враќање вредноста на тројно да foo повторно.
Така што ова, всушност, ќе се пребрише foo.
Ова е единствениот начин да се направи ова со локална променлива.
Па сега ако се додаде уште еден линија код овде
на крајот на главна за да се печати вредноста на foo,
тоа всушност ќе се печати од 12.
>> Опсег на променливите е генерално не е премногу голем дел од проблемот
Ако го внесете името на сите ваши променливи различни нешта.
Но, тоа може да се добие вид на непријатни ако истата променлива име
се појавува во повеќе функции, што ќе се случи многу.
Ако некогаш сте се работи во реалниот свет каде
ќе се работи на соработка програми и луѓе во различни тимови
работат заедно за да пишуваат на истиот програма или на истиот сет на програми,
тие често ќе повторна употреба променлива имиња, особено заеднички оние
како и x, y, I, J, и така натаму.
>> Но, кога променливите имаат со истото име, прашањата опсегот
може да се добие малку сложени да ја формира за да се интерпретира.
На пример, дали знаете што ќе бидат отпечатени
на крајот на оваа конкретна програма?
Земете една минута.
Паузирате видеото и прочитајте преку оваа програма.
Можете да го видите на врвот ние имаат декларација функција
за функција наречена прираст.
Таа функција трае една параметар, цел број кој ние го нарекуваме х.
И тоа излези цел број.
Тоа е тип враќање на почетокот.
>> Тогаш имаме главната, неколку редови код во главниот, последниот на кој
е изјава за печатење.
И се сеќавам, тоа е прашањето овде.
Она што навистина се случува да биде печатени на крајот на оваа функција?
И тогаш, всушност имаме дефиниција на прираст подолу.
>> Па се земе една минута, чекор по чекор кодот, се трага работи надвор.
Дали знаете што ќе се печатат во На крајот на оваа конкретна програма?
>> Во ред.
Се надевам, дека сте ги направиле неколку секунди за да се обиде и да се интерпретира ова едно.
Да го сториме тоа заедно.
>> Па јас прецртан прираст е изјава на врвот таму.
Тоа беше вид на забава.
Тоа не е свој променлива.
Тоа не има свој делокруг.
Тоа е само една функција декларација, па заради
се обидува да го анализирам дознаете што има случува во оваа програма,
ние, како може само да го избегнат.
>> Сега имаме во овој случај, причината на овој проблем е незгодно
е затоа што имаме локални променливи во двете главни и зголемување, од кои секоја
е наречен x.
И, се разбира суштината на ова прашање е обидувајќи се да дознаете кои suss х се пресоблекува
и како тоа да се промени.
Па јас обоени секоја инстанца на x тоа е локално до главна црвено.
И јас сум обоени секој случај на x тоа е локален за зголемување сина.
>> Известувањето во таа трета линија на главни, y еднаква прираст
x, дека прираст не е да се биде донесен главната х, или црвениот х.
Тоа е добивање донесе копија од него.
А тоа е само ќе да се работи со дека копија од него, сини х.
Ако сте математички наклонети, можеби ќе
наместо да се помисли на тоа како x под метри од главната и х под i за зголемување.
Но, тоа е истата идеја.
x под м, или црвено Х во претходниот слајд,
се променливи кои се local-- е пример на x, а дека
е локално до главна, а х под I, или сини променливи во претходниот слајд,
се случаи на х дека се локални прираст.
>> Значи, сте биле во можност да дознаам што оваа функција печатени на крајот?
Јас сум Даг Лојд, и ова е CS50.