Doug LLOYD: Como comezar de traballo con funcións, outra cousa vai chegar a ser realmente importante entender, que é o concepto de extensión variable. Entón, é un ámbito característica dunha variable que define a partir do cal funcións esa variable se pode acceder. Existen dous ámbitos principais en C, variables locais e variables globais. Agora, as variables locais só se pode acceder dentro das funcións en que son creados. Non poden acceder por calquera outro función que existe no seu programa, só a función de o cal foi creado. As variables globais, sobre o Por outra banda, pode ser accedido por calquera función no programa. E a razón para iso é porque eles non están creadas dentro de calquera función particular. Nós declaralo los fora do todas as funcións, que significa que todas as funcións sabe onde que é e pode acceder e manipula-lo. Ata agora, no curso que ten bastante moi traballado exclusivamente con variables locais. Aquí está un exemplo dunha moi, moi principal función sinxela e dun xeito moi sinxelo función adicional que temos escrito. Neste caso, X, que Eu colorase verde só para destacar a localidade ou o alcance desta variable, é lugar para a función tripla. principal non pode referirse a x en todo. El non sabe o que é. Ningunha outra función, en realidade, se tiña funcións adicionais aquí, podería referirse a x. Así mesmo, resulta que teño cor azul, é lugar só para principal. Só principal sabe o que o resultado é variable. triple non pode usalo. Agora, como mencionei, existen variables globais. Se declarar a variable fóra de calquera función, todas as funcións do programa pode referirse a el. Polo tanto, neste caso eu teño en destaque na verde unha declaración de variable global. Neste caso, o ser variable declarada chámase global, só para ser moi claro sobre o tema. É do tipo float. E eu atribuílo lo valor 0,5050. Vai notar que, en principal e en triple, eu son capaz de se referir a global. E, de feito, se eu ir a través do programa indicadas, principais primeiros invitacións triple, multiplica por 3 triples globais, que define o seu valor como 1,5-algo, 1,51 ou algo así, e entón principal tamén amosa o valor do global. Así principal non imprimirá 0,5050-lo, imprimirá tempos globais 3, 1,51. Entón tes que ter coidado ao se está a traballar con variables globais. Mentres eles son moi flexibles na ser capaz de pasar información en torno de xeito que cada función pode usalo, el tamén pode ter algúns consecuencias perigosas se os cambios Unha función o valor dunha variable antes que espera que sexa modificado. Por que esta distinción importa? Por que nos importa algunhas variables son locais e outros son global? Ben, para a maior parte, as variables locais C son o que se chama pasados ​​por valor cando facemos unha chamada de función. Que significa iso? Ben, cando unha variable é pasado por valor, o receptor, que é outra forma de dicir a función que está a recibir a variable que pásase como unha entrada, realmente non recibe a propia variable. Recibe o seu propio copia do mesmo para traballar. Esta é unha distinción moi importante. Nós só vimos un segundo atrás que con variables globais, manipular o mundial variable en función dun, o efecto en que unha función leva a través de calquera outra función. Pero con variables locais, iso non é certo. Cada función cando recibe como variables de entrada recibir copias desas variables, non as variables. Entón, cal é o efecto colateral de que? Isto significa que a variable entre o chamador, a función que é facer a chamada de función, é inalterada, a non ser que o substitúa. Por exemplo, neste código foo non cambia en todo. Int foo é igual a 4, chamar triple de foo, dentro triple, esperaríamos que fose foo ser multiplicado por 3, e volveu, pero non hai realmente ningún efecto. Aquí, con todo, unha diferenza moi sutil. Isto ten o efecto que queremos. Entender por que? Estamos substituíndo foo na principal neste momento. Así int foo é igual a 4, é igual a foo foo triple, cando facer esa chamada, triple obtén a súa propia copia de foo, a súa propia copia do 4. Di volver 4 veces 3, ou calquera variable é pasado en tempos 3. E entón imos asignar o retorno valor do triplo para foo novo. Entón, iso realmente ía substituír foo. Esta é a única forma de fazê- iso con variable local. Polo tanto, agora engadimos outro liña de código aquí ao final da páxina para imprimir o valor de foo, sería de feito imprimir 12. O ámbito de variables é xeralmente non moi dun problema se nomear os seus variables cousas distintas. Pero pode estar tipo de desagradable O mesmo nome de variable aparece en múltiples funcións, que vai pasar moito. Se xa non funcionan en o mundo real, onde se está a traballar en colaboración programas e persoas en equipos distintos están a traballar xuntos para escribir o mesmo programa ou o mesmo conxunto de programas, eles frecuentemente vai reutilizar variable nomes, especialmente os comúns como X, Y, I, J, e así por diante. Pero cando ten variables mesmo nome, as cuestións de ámbito pode ser un pouco máis complicado para analizar. Por exemplo, vostede sabe o que sería impreso a finais deste programa en particular? Tomé un minuto. Deter o vídeo e ler a través deste programa. Podes ver na parte superior nós ten unha declaración de función para unha función chamada de incremento. Esta función ten un único parámetro, un número enteiro que chamamos x. E xera un número enteiro. Ese é o tipo de retorno no inicio. Entón temos principal, un par de liñas de código na páxina, a última das cales é unha declaración de impresión. E lembre, esa é a cuestión aquí. O que é realmente vai ser impreso a finais desta función? E entón nós realmente temos o definición de incremento continuación. Entón, tome un minuto percorrer o código, trace as cousas. Vostede sabe o que será impreso na a finais deste programa en particular? Todo ben. Esperanza, tomou uns segundos para tratar de analizar un regalo para fóra. Imos facelo xuntos. Entón, eu teño cruzado para fóra incremento de declaración na parte superior alí. Era unha especie de distracción. Non é a súa propia variable. Non ten o seu propio ámbito. É só unha función declaración, polo tanto, para fins de tentar analizar o que está pasando neste programa, podemos moi ben só evitalo. Agora temos neste caso, o polo que este problema é complicado é porque temos variables locais en ambos principal e incremento, cada un dos cales chámase x. E, por suposto, o cerne desta cuestión está intentando desvelalas out que x é alterado e como se cambiou. Entón eu colorase cada instancia x é lugar para vermello principal. E Eu colorase cada instancia de x é lugar para incrementar azul. Aviso nesa terceira liña de inicio, y é igual incremento x, ese incremento non está a ser pasou x do principal, ou no X vermello. Está recibindo pasou unha copia do mesmo. E iso só vai funcionar con que copia do mesmo, o x azul. Se é matematicamente inclinado, pode en vez diso penso niso como sub x m para o principal e sub x i para incremento. Pero é a mesma idea. x sub m, ou o vermello x de no slide anterior, son as variables que son local-- é a instancia de x en vez é lugar para inicio e sub x i, ou a variables azuis no slide anterior, son os exemplos de X que son lugares para incrementar. Entón, foi capaz de descubrir o que esta función impresa ao final? Eu son Doug Lloyd, e este é CS50.