[Powered by Google Translate] DAVID DICIURCIO: Deci, un concept important de înțeles în
Programarea este noțiunea de aplicare.
Domeniul de aplicare poate fi definită ca contextul în care o variabilă este
vizibile sau accesibile.
De exemplu, să presupunem că avem o funcție, principal, care este
Trebuia să incrementa o variabilă, x, de la o la doi.
După cum putem vedea, initializeaza principal de x la unul, imprimă
out un text, apoi ruleaza creșterea funcția, înainte de
imprimarea mai mult text.
În cazul în care această funcție a fost pentru a rula corect, aceasta ar
imprima x ca 2.
Hai să încercăm.
>> Deci, după cum puteți vedea, principala nu face ceea ce ne-am asteptat sa.
Ea returnează valoarea 1, mai degrabă
decât ne-am așteptat 2.
Motivul pentru acest bug poate fi explicat prin domeniul de aplicare.
În funcție, principal, am inițializat x
numai în funcție.
Cu alte cuvinte, variabila x este declarată la nivel local în cadrul
funcție, principal, și nu este accesibilă
în afara funcției.
Numai principal poate accesa x în această situație.
Când numim creștere nu ne trece x ca intrare, dar
doar o copie a lui x.
Ca urmare a acestui fapt, funcția de creștere doar adaugă
valoarea 1 la o copie de valoarea lui x.
Dar să nu se x.
Când ne-am întoarce la principal, x-zis nu a schimbat deloc.
Deci, imprimarea x va produce numai valoarea 1.
>> Ei bine, atunci lasă că întrebarea: cum ar trebui să ne stabilească
această funcție?
O soluție are increment returna o valoare.
În acest fel, creșterea funcția va fi
să ne dea înapoi un număr întreg.
Deci, aici e codul nostru revizuit cu
supleant creștere funcție.
Aici, ne-am întors în locul x + 1, mai degrabă decât doar sfârșitul
cu x fiind egală cu x + 1.
De asemenea, ia observați că am înlocuit de ieșire a
creștere, anularea în prealabil, cu int, afirmând că
incrementului va trece acum înapoi o valoare întreagă.
Acum, după ce ruleaza de creștere, se va întoarce cu o valoare de
2, exact așa cum ne-am propus.
>> O altă situație care demonstrează importanța domeniului de aplicare al
este în scopeloop.c.
În acest cod, avem o buclă, în care pentru variabila
totală este inițializat în timpul fiecare pas.
Din păcate, acest cod nu compila.
Acest lucru se datorează faptului că, de fapt variabilă totală nu există
în afara de bucla.
Variabilele declarate în interiorul bucle există doar în cadrul
buclă în sine și este demonstrat în eroare noastră
mesaj, totala nedeclarate.
Variabilă totală nu a fost încă să fie declarat în cadrul domeniului de aplicare
din funcția principală.
În plus, la fiecare repetare a buclei nostru pentru, ne
sunt total de reinitializing nostru la 0.
Acest lucru în sine nu ține codul din compilarea, dar
ar împiedica total de la vreodată ajungând la o valoare de trecut 1.
>> Din nou, ceea ce este cel mai bun mod de a rezolva acest lucru?
Una dintre cele mai simple metode de a face include totală local
funcția, principal, mai degrabă decât la bucla sine.
Acest lucru va totaliza să incrementa de fapt, și, în final,
permite să fie tipărite după bucla for.
O alta tehnica pe care o voi rezuma doar pentru scurt timp ar
fi utilizarea de variabile globale.
Variabilele globale sunt variabile, care sunt declarate înainte de principal
care menține valoarea lor de-a lungul întregului program.
Desigur, functiile pot modifica valoarea unui nivel global,
dar ele nu ies din sfera de aplicare ca variabile locale.
Cu toate acestea, folosind variabile globale tinde să se încruntă
la ca design de rău, deoarece există modalități mai bune de
schimbul de date între funcții.
De exemplu, folosind pointeri.
Dar mai multe despre asta altă dată.
>> În cele din urmă, este important să aibă o înțelegere a domeniului de aplicare
în contextul memoria computerului, sau RAM.
Când ne-am executarea unui program, variabilele locale și funcții
se adaugă într-o anumită locație, în
RAM numită stivă.
Ca retur funcții, cadrele stack ale variabilelor sunt
eliminat eficient din stiva de eliberarea mai multă memorie.
Deci, atunci când revizuirea domeniului de aplicare, asigurați-vă că vă amintiți aceste trei
puncte-cheie.
Unul, domeniul de aplicare poate fi local sau global.
Aceasta depinde în cazul în care variabila este declarată.
Două variabile, declarate sau inițializată în funcții sunt
locale pentru această funcție și nu poate fi schimbat de către alte
funcții, cel puțin nu fără a utiliza pointeri.
În cele din urmă, variabilele sunt, de asemenea, bucle locale pentru care sunt
a declarat în cadrul.
Variabilele nu sunt accesibile
în afara buclei.
>> Asta e tot pentru acum pe domeniul de aplicare.
Multumesc pentru vizionare.