DOUG LLOYD: cum de a începe de lucru cu funcții,
un alt lucru va deveni foarte important pentru a înțelege,
care este conceptul de domeniul de aplicare variabile.
Deci, domeniul de aplicare este un caracteristică a unei variabile
care definește din care funcții care variabila poate fi accesat.
>> Există două domenii principale în C, variabile locale și variabile globale.
Acum, variabile locale pot doar fi accesate în funcțiile
în care acestea sunt create.
Ele nu pot fi accesate de orice alt funcție care există în programul tău,
numai funcția în care a fost creat.
Variabile globale, pe de altă parte, pot fi accesate
de orice funcție în cadrul programului.
Și motivul pentru care este pentru că ei nu sunt creat în interiorul
de orice funcție special.
Noi le declara în afara toate funcțiile, care
înseamnă că fiecare funcție știe unde este și poate accesa și manipula o.
>> Până în prezent, în cursul ai destul de mult de lucru exclusiv fost
cu variabile locale.
Iată un exemplu de o foarte, foarte Funcția principală simplu și un foarte simplu
funcție suplimentară pe care le-am scris.
În acest caz, X, care Am colorat verde doar
pentru a evidenția localitatea sau domeniul de aplicare al acelei variabile,
este locală la funcția triplu.
principală nu se poate referi la X la toate.
Ea nu știe ce este.
Nici o altă funcție, de fapt, dacă am a avut funcții suplimentare aici,
ar putea referi la X.
>> În mod similar, rezultatele pe care am culoare albastru, este locală doar la principal.
Numai principal știe ce rezultatul variabilă este.
triple nu se poate folosi.
>> Acum ca am menționat, există variabile globale.
Dacă vă declar că variabila în afara de orice funcție,
toate funcțiile în Programul se poate referi la ea.
Deci, în acest caz, am evidențiat în verde o declarație variabilă globală.
În acest caz, fiind variabilă a declarat
este numit la nivel mondial, doar pentru a fie extrem de clar cu privire la aceasta.
Acesta este de tip float.
Și am atribuie valoarea 0.5050.
>> Veți observa că în principal și în triple, eu sunt în măsură să se refere la nivel mondial.
Și, de fapt, dacă mă duc prin programul cum este indicat, principalele primele apeluri triplu,
multiplică triple globale de 3, care setează valoarea la 1,5-ceva,
1.51 sau ceva de genul asta, si apoi, de asemenea, principalul imprimă valoarea
de la nivel mondial.
Deci principal nu va imprima 0.5050 ea, va tipări ori la nivel mondial 3, 1,51.
Așa că trebuie să fie atenți atunci când lucrați cu variabile globale.
În timp ce sunt foarte flexibile în capacitatea de a transmite informații
în jurul astfel încât fiecare Funcția poate folosi,
de asemenea, poate avea unele consecințe periculoase
dacă modificările O funcție valoarea unei variabile
înainte de a vă așteptați să fie schimbat.
>> De ce contează această distincție?
De ce ne pasă dacă unele variabile sunt locale, iar altele sunt la nivel mondial?
Ei bine, pentru cea mai mare parte, variabilele locale în C sunt ceea ce se numește transmise prin valoare
atunci când a efectua un apel funcție.
Ce înseamnă asta?
>> Ei bine, atunci când o variabilă este trecut de valoare, callee, care
este un alt mod de a spune funcției care primește variabila care
devine trecut în calitate de intrare, de fapt nu primesc acea variabilă în sine.
Primește propria copie a acestuia de a lucra cu.
Aceasta este o distincție foarte important.
Tocmai am văzut acum o secundă care cu variabile globale,
dacă vom manipula la nivel mondial variabilă în funcție unul, efectul
în care unul funcție realizează până la orice altă funcție.
>> Dar, cu variabile locale, nu este adevarat.
Fiecare funcție atunci când primeste variabile ca intrare
primi copii ale acestor variabile, nu variabilele înșiși.
Deci, ce este efectul secundar al asta?
Asta înseamnă că variabila in apelantul, funcția pe care
este de a face apel funcție, este neschimbate dacă nu-l ignora.
>> De exemplu, în acest cod foo nu este schimbat deloc.
Int foo este egal cu 4, apel triplu de foo, interiorul triple,
ne-am aștepta ca foo-ar se înmulțește cu 3 și sa întors,
dar există de fapt nici un efect.
>> Aici însă, o diferență foarte subtil.
Aceasta are ca efect ne-o dorim.
Vedeți de ce?
Suntem imperative foo în principal de data asta.
>> Deci foo Int egal 4, foo este egal triple foo, atunci când face acest apel,
triplu devine propria copie de foo, propria copie a 4.
Se spune reveni de 4 ori 3, sau orice variabilă devine trecut în vremuri 3.
Și apoi ne-am atribui revenirea Valoarea de triplu pentru a foo din nou.
Astfel încât acest fapt ar suprascrie foo.
Aceasta este singura modalitate de a face acest lucru cu variabile locale.
Deci, acum, dacă vom adăuga un alt linie de cod aici
la sfârșitul principal la imprima valoarea foo,
ar imprima, de fapt, în 12.
>> Domeniu de aplicare variabil este, în general Nu prea mult de o problemă
dacă numele dvs. toate variabile lucruri diferite.
Dar se poate obține un fel de urât în cazul în care același nume variabilei
apare în mai multe funcții, care se va întâmpla o mulțime.
Dacă ați vreodată funcționează în lumea reală în cazul în care
sunteți de lucru pe colaborare programe și oameni în echipe diferite
lucreaza impreuna pentru a scrie la fel Programul sau același set de programe,
vor refolosi frecvent variabilă nume, în special cele comune
ca x, y, i, j, și așa mai departe.
>> Dar atunci când variabilele au același nume, problemele domeniul de aplicare
poate obține un pic mai complicat de a analiza.
De exemplu, știi ce s-ar fi imprimate
la sfârșitul acestui program special?
Ia un minut.
Pauză video și citit prin acest program.
Puteti vedea la WE top au o declarație funcție
pentru o funcție numită creștere.
Această funcție are un singur parametru, un număr întreg pe care o numim X.
Și va fi afișat un număr întreg.
Asta e tipul de întoarcere de la început.
>> Apoi avem principal, o pereche de linii de cod în principal, dintre care ultima
este o declarație de imprimare.
Și amintiți-vă, asta e întrebarea aici.
Ce este, de fapt va fi tipărită la sfârșitul acestei funcții?
Și atunci am, de fapt, Definiția creștere de mai jos.
>> Astfel încât să ia un minut, pas prin codul, urme lucrurile.
Știi ce va fi imprimat la la sfârșitul acestui program special?
>> In regula.
Sperăm că, ai luat câteva secunde pentru a încerca și analiza acest unul.
Să o facem împreună.
>> Așa că am trecut pe creștere a declarație din partea de sus acolo.
A fost un fel de o distragere a atenției.
Nu e propriu variabilă.
Ea nu are propriul domeniu de aplicare.
E doar o funcție declarație, asa ca pentru scopuri
de a încerca să elimine ceea ce este întâmplă în acest program,
am putea la fel de bine doar evita.
>> Acum avem în acest caz, Motivul acestei probleme este complicat
este pentru că avem variabilele locale în atât principală și creștere, fiecare dintre care
este numit de x.
Și, desigur, miezul acestei probleme este încercând să suss din care X devine schimbat
și cum se schimbă.
Așa că am colorat fiecare caz de X, care este locală la rosu principal.
Și am colorat fiecare instanță a x care este locală pentru a incrementa albastru.
>> Observații în al treilea rând de principal, y este egal cu increment
X, care este în curs de creștere nu X principal a trecut, sau X roșu.
Se face trecut o copie a acestuia.
Si este doar de gând să lucreze cu că copie a acestuia, albastru x.
Dacă sunteți matematic înclinat, s-ar putea
s-au gândit în loc de acest lucru ca X sub m pentru sub principală și X i pentru creștere.
Dar e aceeași idee.
X sub m, sau roșu x lui în diapozitivul anterior,
sunt variabilele care sunt local-- este instanța de X mai degrabă că
este locală principală, și x sub i, sau variabile albastre în diapozitivul anterior,
sunt cazurile de X, care sunt locale pentru a incrementa.
>> Deci, ai fost în stare să dau seama ce Această funcție tipărită la sfârșitul?
Sunt Doug Lloyd, iar acest lucru este CS50.