1 00:00:00,000 --> 00:00:05,300 2 00:00:05,300 --> 00:00:07,300 DOUG LLOYD: cum de a începe de lucru cu funcții, 3 00:00:07,300 --> 00:00:09,966 un alt lucru va deveni foarte important pentru a înțelege, 4 00:00:09,966 --> 00:00:12,380 care este conceptul de domeniul de aplicare variabile. 5 00:00:12,380 --> 00:00:14,490 Deci, domeniul de aplicare este un caracteristică a unei variabile 6 00:00:14,490 --> 00:00:18,860 care definește din care funcții care variabila poate fi accesat. 7 00:00:18,860 --> 00:00:24,595 >> Există două domenii principale în C, variabile locale și variabile globale. 8 00:00:24,595 --> 00:00:27,830 Acum, variabile locale pot doar fi accesate în funcțiile 9 00:00:27,830 --> 00:00:29,045 în care acestea sunt create. 10 00:00:29,045 --> 00:00:32,170 Ele nu pot fi accesate de orice alt funcție care există în programul tău, 11 00:00:32,170 --> 00:00:34,184 numai funcția în care a fost creat. 12 00:00:34,184 --> 00:00:36,350 Variabile globale, pe de altă parte, pot fi accesate 13 00:00:36,350 --> 00:00:37,719 de orice funcție în cadrul programului. 14 00:00:37,719 --> 00:00:40,260 Și motivul pentru care este pentru că ei nu sunt creat în interiorul 15 00:00:40,260 --> 00:00:41,441 de orice funcție special. 16 00:00:41,441 --> 00:00:43,690 Noi le declara în afara toate funcțiile, care 17 00:00:43,690 --> 00:00:48,940 înseamnă că fiecare funcție știe unde este și poate accesa și manipula o. 18 00:00:48,940 --> 00:00:52,010 >> Până în prezent, în cursul ai destul de mult de lucru exclusiv fost 19 00:00:52,010 --> 00:00:54,280 cu variabile locale. 20 00:00:54,280 --> 00:00:58,320 Iată un exemplu de o foarte, foarte Funcția principală simplu și un foarte simplu 21 00:00:58,320 --> 00:01:00,680 funcție suplimentară pe care le-am scris. 22 00:01:00,680 --> 00:01:03,180 În acest caz, X, care Am colorat verde doar 23 00:01:03,180 --> 00:01:07,400 pentru a evidenția localitatea sau domeniul de aplicare al acelei variabile, 24 00:01:07,400 --> 00:01:09,240 este locală la funcția triplu. 25 00:01:09,240 --> 00:01:12,300 principală nu se poate referi la X la toate. 26 00:01:12,300 --> 00:01:14,259 Ea nu știe ce este. 27 00:01:14,259 --> 00:01:17,050 Nici o altă funcție, de fapt, dacă am a avut funcții suplimentare aici, 28 00:01:17,050 --> 00:01:19,360 ar putea referi la X. 29 00:01:19,360 --> 00:01:23,520 >> În mod similar, rezultatele pe care am culoare albastru, este locală doar la principal. 30 00:01:23,520 --> 00:01:26,980 Numai principal știe ce rezultatul variabilă este. 31 00:01:26,980 --> 00:01:30,010 triple nu se poate folosi. 32 00:01:30,010 --> 00:01:32,580 >> Acum ca am menționat, există variabile globale. 33 00:01:32,580 --> 00:01:35,575 Dacă vă declar că variabila în afara de orice funcție, 34 00:01:35,575 --> 00:01:38,290 toate funcțiile în Programul se poate referi la ea. 35 00:01:38,290 --> 00:01:44,010 Deci, în acest caz, am evidențiat în verde o declarație variabilă globală. 36 00:01:44,010 --> 00:01:45,830 În acest caz, fiind variabilă a declarat 37 00:01:45,830 --> 00:01:48,720 este numit la nivel mondial, doar pentru a fie extrem de clar cu privire la aceasta. 38 00:01:48,720 --> 00:01:49,720 Acesta este de tip float. 39 00:01:49,720 --> 00:01:52,940 Și am atribuie valoarea 0.5050. 40 00:01:52,940 --> 00:01:58,080 >> Veți observa că în principal și în triple, eu sunt în măsură să se refere la nivel mondial. 41 00:01:58,080 --> 00:02:03,480 Și, de fapt, dacă mă duc prin programul cum este indicat, principalele primele apeluri triplu, 42 00:02:03,480 --> 00:02:10,440 multiplică triple globale de 3, care setează valoarea la 1,5-ceva, 43 00:02:10,440 --> 00:02:16,080 1.51 sau ceva de genul asta, si apoi, de asemenea, principalul imprimă valoarea 44 00:02:16,080 --> 00:02:16,620 de la nivel mondial. 45 00:02:16,620 --> 00:02:24,424 Deci principal nu va imprima 0.5050 ea, va tipări ori la nivel mondial 3, 1,51. 46 00:02:24,424 --> 00:02:27,340 Așa că trebuie să fie atenți atunci când lucrați cu variabile globale. 47 00:02:27,340 --> 00:02:30,260 În timp ce sunt foarte flexibile în capacitatea de a transmite informații 48 00:02:30,260 --> 00:02:32,650 în jurul astfel încât fiecare Funcția poate folosi, 49 00:02:32,650 --> 00:02:34,580 de asemenea, poate avea unele consecințe periculoase 50 00:02:34,580 --> 00:02:38,770 dacă modificările O funcție valoarea unei variabile 51 00:02:38,770 --> 00:02:42,360 înainte de a vă așteptați să fie schimbat. 52 00:02:42,360 --> 00:02:44,200 >> De ce contează această distincție? 53 00:02:44,200 --> 00:02:48,070 De ce ne pasă dacă unele variabile sunt locale, iar altele sunt la nivel mondial? 54 00:02:48,070 --> 00:02:53,880 Ei bine, pentru cea mai mare parte, variabilele locale în C sunt ceea ce se numește transmise prin valoare 55 00:02:53,880 --> 00:02:56,087 atunci când a efectua un apel funcție. 56 00:02:56,087 --> 00:02:56,920 Ce înseamnă asta? 57 00:02:56,920 --> 00:03:00,880 >> Ei bine, atunci când o variabilă este trecut de valoare, callee, care 58 00:03:00,880 --> 00:03:04,350 este un alt mod de a spune funcției care primește variabila care 59 00:03:04,350 --> 00:03:08,465 devine trecut în calitate de intrare, de fapt nu primesc acea variabilă în sine. 60 00:03:08,465 --> 00:03:12,490 Primește propria copie a acestuia de a lucra cu. 61 00:03:12,490 --> 00:03:14,350 Aceasta este o distincție foarte important. 62 00:03:14,350 --> 00:03:18,250 Tocmai am văzut acum o secundă care cu variabile globale, 63 00:03:18,250 --> 00:03:23,240 dacă vom manipula la nivel mondial variabilă în funcție unul, efectul 64 00:03:23,240 --> 00:03:26,390 în care unul funcție realizează până la orice altă funcție. 65 00:03:26,390 --> 00:03:28,920 >> Dar, cu variabile locale, nu este adevarat. 66 00:03:28,920 --> 00:03:32,060 Fiecare funcție atunci când primeste variabile ca intrare 67 00:03:32,060 --> 00:03:36,367 primi copii ale acestor variabile, nu variabilele înșiși. 68 00:03:36,367 --> 00:03:37,825 Deci, ce este efectul secundar al asta? 69 00:03:37,825 --> 00:03:40,450 Asta înseamnă că variabila in apelantul, funcția pe care 70 00:03:40,450 --> 00:03:45,600 este de a face apel funcție, este neschimbate dacă nu-l ignora. 71 00:03:45,600 --> 00:03:50,420 >> De exemplu, în acest cod foo nu este schimbat deloc. 72 00:03:50,420 --> 00:03:55,450 Int foo este egal cu 4, apel triplu de foo, interiorul triple, 73 00:03:55,450 --> 00:03:58,850 ne-am aștepta ca foo-ar se înmulțește cu 3 și sa întors, 74 00:03:58,850 --> 00:04:01,450 dar există de fapt nici un efect. 75 00:04:01,450 --> 00:04:03,460 >> Aici însă, o diferență foarte subtil. 76 00:04:03,460 --> 00:04:06,520 Aceasta are ca efect ne-o dorim. 77 00:04:06,520 --> 00:04:07,730 Vedeți de ce? 78 00:04:07,730 --> 00:04:11,500 Suntem imperative foo în principal de data asta. 79 00:04:11,500 --> 00:04:16,899 >> Deci foo Int egal 4, foo este egal triple foo, atunci când face acest apel, 80 00:04:16,899 --> 00:04:21,680 triplu devine propria copie de foo, propria copie a 4. 81 00:04:21,680 --> 00:04:27,340 Se spune reveni de 4 ori 3, sau orice variabilă devine trecut în vremuri 3. 82 00:04:27,340 --> 00:04:32,109 Și apoi ne-am atribui revenirea Valoarea de triplu pentru a foo din nou. 83 00:04:32,109 --> 00:04:33,650 Astfel încât acest fapt ar suprascrie foo. 84 00:04:33,650 --> 00:04:35,816 Aceasta este singura modalitate de a face acest lucru cu variabile locale. 85 00:04:35,816 --> 00:04:38,120 Deci, acum, dacă vom adăuga un alt linie de cod aici 86 00:04:38,120 --> 00:04:40,870 la sfârșitul principal la imprima valoarea foo, 87 00:04:40,870 --> 00:04:45,030 ar imprima, de fapt, în 12. 88 00:04:45,030 --> 00:04:48,600 >> Domeniu de aplicare variabil este, în general Nu prea mult de o problemă 89 00:04:48,600 --> 00:04:51,190 dacă numele dvs. toate variabile lucruri diferite. 90 00:04:51,190 --> 00:04:54,920 Dar se poate obține un fel de urât în cazul în care același nume variabilei 91 00:04:54,920 --> 00:04:58,820 apare în mai multe funcții, care se va întâmpla o mulțime. 92 00:04:58,820 --> 00:05:02,130 Dacă ați vreodată funcționează în lumea reală în cazul în care 93 00:05:02,130 --> 00:05:06,080 sunteți de lucru pe colaborare programe și oameni în echipe diferite 94 00:05:06,080 --> 00:05:11,000 lucreaza impreuna pentru a scrie la fel Programul sau același set de programe, 95 00:05:11,000 --> 00:05:13,900 vor refolosi frecvent variabilă nume, în special cele comune 96 00:05:13,900 --> 00:05:18,020 ca x, y, i, j, și așa mai departe. 97 00:05:18,020 --> 00:05:20,370 >> Dar atunci când variabilele au același nume, problemele domeniul de aplicare 98 00:05:20,370 --> 00:05:23,080 poate obține un pic mai complicat de a analiza. 99 00:05:23,080 --> 00:05:26,790 De exemplu, știi ce s-ar fi imprimate 100 00:05:26,790 --> 00:05:30,190 la sfârșitul acestui program special? 101 00:05:30,190 --> 00:05:31,280 Ia un minut. 102 00:05:31,280 --> 00:05:33,382 Pauză video și citit prin acest program. 103 00:05:33,382 --> 00:05:35,590 Puteti vedea la WE top au o declarație funcție 104 00:05:35,590 --> 00:05:37,350 pentru o funcție numită creștere. 105 00:05:37,350 --> 00:05:40,800 Această funcție are un singur parametru, un număr întreg pe care o numim X. 106 00:05:40,800 --> 00:05:42,610 Și va fi afișat un număr întreg. 107 00:05:42,610 --> 00:05:44,820 Asta e tipul de întoarcere de la început. 108 00:05:44,820 --> 00:05:48,140 >> Apoi avem principal, o pereche de linii de cod în principal, dintre care ultima 109 00:05:48,140 --> 00:05:49,250 este o declarație de imprimare. 110 00:05:49,250 --> 00:05:51,140 Și amintiți-vă, asta e întrebarea aici. 111 00:05:51,140 --> 00:05:54,240 Ce este, de fapt va fi tipărită la sfârșitul acestei funcții? 112 00:05:54,240 --> 00:05:58,110 Și atunci am, de fapt, Definiția creștere de mai jos. 113 00:05:58,110 --> 00:06:01,760 >> Astfel încât să ia un minut, pas prin codul, urme lucrurile. 114 00:06:01,760 --> 00:06:08,100 Știi ce va fi imprimat la la sfârșitul acestui program special? 115 00:06:08,100 --> 00:06:08,600 >> In regula. 116 00:06:08,600 --> 00:06:11,433 Sperăm că, ai luat câteva secunde pentru a încerca și analiza acest unul. 117 00:06:11,433 --> 00:06:13,370 Să o facem împreună. 118 00:06:13,370 --> 00:06:16,022 >> Așa că am trecut pe creștere a declarație din partea de sus acolo. 119 00:06:16,022 --> 00:06:17,230 A fost un fel de o distragere a atenției. 120 00:06:17,230 --> 00:06:18,570 Nu e propriu variabilă. 121 00:06:18,570 --> 00:06:19,879 Ea nu are propriul domeniu de aplicare. 122 00:06:19,879 --> 00:06:21,920 E doar o funcție declarație, asa ca pentru scopuri 123 00:06:21,920 --> 00:06:24,330 de a încerca să elimine ceea ce este întâmplă în acest program, 124 00:06:24,330 --> 00:06:26,660 am putea la fel de bine doar evita. 125 00:06:26,660 --> 00:06:29,560 >> Acum avem în acest caz, Motivul acestei probleme este complicat 126 00:06:29,560 --> 00:06:34,030 este pentru că avem variabilele locale în atât principală și creștere, fiecare dintre care 127 00:06:34,030 --> 00:06:35,090 este numit de x. 128 00:06:35,090 --> 00:06:39,830 Și, desigur, miezul acestei probleme este încercând să suss din care X devine schimbat 129 00:06:39,830 --> 00:06:41,890 și cum se schimbă. 130 00:06:41,890 --> 00:06:46,900 Așa că am colorat fiecare caz de X, care este locală la rosu principal. 131 00:06:46,900 --> 00:06:52,040 Și am colorat fiecare instanță a x care este locală pentru a incrementa albastru. 132 00:06:52,040 --> 00:06:55,220 >> Observații în al treilea rând de principal, y este egal cu increment 133 00:06:55,220 --> 00:07:00,800 X, care este în curs de creștere nu X principal a trecut, sau X roșu. 134 00:07:00,800 --> 00:07:03,320 Se face trecut o copie a acestuia. 135 00:07:03,320 --> 00:07:06,987 Si este doar de gând să lucreze cu că copie a acestuia, albastru x. 136 00:07:06,987 --> 00:07:08,820 Dacă sunteți matematic înclinat, s-ar putea 137 00:07:08,820 --> 00:07:14,230 s-au gândit în loc de acest lucru ca X sub m pentru sub principală și X i pentru creștere. 138 00:07:14,230 --> 00:07:15,700 Dar e aceeași idee. 139 00:07:15,700 --> 00:07:18,999 X sub m, sau roșu x lui în diapozitivul anterior, 140 00:07:18,999 --> 00:07:21,790 sunt variabilele care sunt local-- este instanța de X mai degrabă că 141 00:07:21,790 --> 00:07:26,900 este locală principală, și x sub i, sau variabile albastre în diapozitivul anterior, 142 00:07:26,900 --> 00:07:30,760 sunt cazurile de X, care sunt locale pentru a incrementa. 143 00:07:30,760 --> 00:07:36,220 >> Deci, ai fost în stare să dau seama ce Această funcție tipărită la sfârșitul? 144 00:07:36,220 --> 00:07:39,420 Sunt Doug Lloyd, iar acest lucru este CS50. 145 00:07:39,420 --> 00:07:41,542