DOUG LLOYD: Quan s'iniciï treballar amb funcions, una altra cosa es convertirà molt important entendre, que és el concepte d'abast variable. Així abast és una característica d'una variable que defineix de quines funcions Es pot accedir a aquesta variable. Hi ha dos àmbits principals en C, variables locals i variables globals. Ara, les variables locals només poden ser visitada dins de les funcions en el qual són creats. No poden ser accedits per cada altre funció que existeix en el seu programa, només la funció en el que va ser creat. Les variables globals, en la D'altra banda, es pot accedir per qualsevol funció en el programa. I la raó d'això és perquè no estan creats a l'interior de qualsevol funció en particular. Els declarem fora del totes les funcions, les quals significa que totes les funcions sap on que és i pot accedir i manipular. Fins ara, en el curs tens prou molt estat treballant exclusivament amb variables locals. Heus aquí un exemple d'un molt, molt funció principal senzill i molt simple funció addicional que hem escrit. En aquest cas, x, que He de color verd just per ressaltar la localitat o l'abast d'aquesta variable, és local a la funció triple. principal no pot referir-se a x en absolut. No sap el que és. Cap altra funció, de fet, si tenia funcions addicionals aquí, podria referir-se a x. De la mateixa manera, els resultats que tinc de color blau, és local només per principal. Només sap el principal el resultat variable és. el triple no pot usar-lo. Ara bé, com ja he esmentat, hi ha variables globals. Si es declara la variable fora de qualsevol funció, totes les funcions en el programa pot referir-se a ella. Així que en aquest cas m'he destacat en verd una declaració de variable global. En aquest cas, el ser variable declarada es diu global, només per ser molt clara al respecte. És de tipus float. I jo assigno el valor 0,5050. Es donarà compte de que, en principal i en triple, sóc capaç de referir-se al global. I de fet, si vaig a través del programa com s'ha indicat, els principals primeres trucades triple, multiplica triples mundials per 3, que estableix el seu valor a 1.5 i tants anys, 1,51 o alguna cosa així, i llavors principal també imprimeix el valor del global. Així principal no imprimirà 0,5050, que imprimirà temps globals 3, 1.51. Així que has de tenir cura quan es treballa amb variables globals. Si bé són molt flexibles en ser capaç de passar informació voltant de manera que cada funció pot usar-lo, també pot tenir alguna conseqüències perilloses si els canvis Una de les funcions el valor d'una variable abans d'esperar que sigui canviat. Per què importa aquesta distinció? Per què ens importa si algunes variables són locals i altres són globals? Bé, en la seva major part, les variables locals en C són el que s'anomena passa per valor quan fem una crida a la funció. Què vol dir això? Bé, quan es passa una variable per valor, el destinatari de la trucada, que és una altra manera de dir la funció que està rebent la variable que es passa a com a entrada, que en realitat no rebre aquesta mateixa variable. Rep el seu pròpia còpia de la mateixa per treballar. Aquesta és una distinció molt important. Acabem de veure fa un segon que amb les variables globals, si manipulem el mundial variable en una funció, l'efecte en què una funció porta a través de qualsevol altra funció. Però amb les variables locals, això no és cert. Cada funció quan rep com a entrada les variables rebre còpies d'aquestes variables, no les pròpies variables. Llavors, quin és l'efecte secundari d'això? Això significa que la variable en la persona que truca, la funció que és fer la crida a la funció, és sense canvis menys que el substitueixi. Per exemple, en el codi foo no canvia en absolut. Int foo és igual a 4, truqui triples de foo, a l'interior de triple, esperaríem que foo faria es multiplicarà per 3 i va tornar, però hi ha en realitat cap efecte. Aquí, però, una diferència molt subtil. Això té l'efecte que volem. ¿Veu vostè per què? Estem reemplaçant foo en principal en aquesta ocasió. Així int foo és igual a 4, foo és igual triples foo, quan fem aquest anomenat, triples obté la seva pròpia còpia de foo, la seva pròpia còpia de 4. Diu tornar 4 vegades 3, o el que sigui la variable es passa en temps 3. I després li assignem el retorn valor de triple foo nou. Així que això realment podria sobreescriure foo. Aquesta és l'única manera de fer- això amb la variable local. Així que ara si afegim una altra línia de codi aquí al final de principal per imprimir el valor de foo, seria de fet imprimir 12. Àmbit de la variable és generalment no massa d'un problema si el nom la totalitat del seu variables de coses diferents. Però pot obtenir el tipus de desagradable si el mateix nom de variable apareix en múltiples funcions, que passarà molt. Si alguna vegada fer el treball en el món real, on s'està treballant en col·laboració programes i persones en diferents equips estan treballant junts per escriure el mateix programa o el mateix conjunt de programes, que van amb freqüència variable de reutilització noms, particularment els comuns com x, i, i, j, i així successivament. Però quan les variables tenen del mateix nom, qüestions d'abast pot ser una mica més difícil d'analitzar. Per exemple, ¿sap vostè el que s'imprimeix al final d'aquest programa en especial? Tome un minut. Pausa el vídeo i llegir a través d'aquest programa. Es pot veure a la part superior que tenir una declaració de la funció per a una funció anomenada de la subhasta. Aquesta funció pren un sol paràmetre, un nombre enter que anomenem x. I dóna sortida a un sencer. Aquest és el tipus de retorn a l'inici. Llavors tenim principal, un parell de línies de codi en principal, l'últim dels quals és una sentència print. I recordi, aquesta és la qüestió aquí. Què és en realitat serà impresa al final d'aquesta funció? I després tenim ELS definició de la subhasta a continuació. Així que pren un minut, pas a pas el codi, traci les coses. Saps el que es va a imprimir en Al final d'aquest programa en especial? Tot bé. Amb sort, vostè ha pres uns segons per tractar d'analitzar aquest cap a fora. Anem a fer-ho junts. Així que m'he creuat a terme la subhasta de declaració en la part superior existeix. Era una mena de distracció. No és la seva pròpia variable. No té el seu propi àmbit. És només una funció declaració, pel que a efectes de tractar d'analitzar el que està succeint en aquest programa, pot ser que també acaba de evitar-ho. Ara que tenim en aquest cas, el raó d'aquest problema és complicat és perquè tenim variables locals en tant principal i d'increment, cadascun dels quals es diu x. I, per descomptat, el quid de la qüestió és tractant de suss que es canvia x i com es veu modificat. Així que he vaig acolorir cada instància de x que és local per vermella principal. I he vaig acolorir cada instància de x això és local per incrementar blau. Avís en aquesta tercera línia de principal, i és igual a la subhasta x, aquest increment no està sent x del principal passat, o la x vermella. Està aconseguint aprovar una còpia del mateix. I només va a treballar amb que copia de la mateixa, la x blava. Si vostè és matemàticament inclinat, vostè pot ser vegada han pensat en això com x sub m per sub principal i x i per a la subhasta. Però és la mateixa idea. x sub m, o el vermell de x a la diapositiva anterior, són les variables que són local-- és la instància de x en lloc que és local a la principal i sub x i, o la les variables de color blau a la diapositiva anterior, són els casos que x són locals per incrementar. Per tant, s'hagi pogut esbrinar què aquesta funció impresa al final? Sóc Doug Lloyd, i això és CS50.