DOUG LLOYD: Cuando se inicie trabajar con funciones,
otra cosa se va a convertir muy importante entender,
que es el concepto de alcance variable.
Así alcance es una característica de una variable
que define de qué funciones Se puede acceder a esa variable.
>> Hay dos ámbitos principales en C, variables locales y variables globales.
Ahora, las variables locales sólo pueden ser visitada dentro de las funciones
en el que son creados.
No pueden ser accedidos por cada otro función que existe en su programa,
sólo la función en el que fue creado.
Las variables globales, en la Por otro lado, se puede acceder
por cualquier función en el programa.
Y la razón de ello es porque no están creados en el interior
de cualquier función en particular.
Los declaramos fuera del todas las funciones, las cuales
significa que todas las funciones sabe dónde que es y puede acceder y manipular.
>> Hasta ahora, en el curso tienes bastante mucho estado trabajando exclusivamente
con variables locales.
He aquí un ejemplo de un muy, muy función principal sencillo y muy simple
función adicional que hemos escrito.
En este caso, x, que He de color verde justo
para resaltar la localidad o el alcance de esa variable,
es local a la función triple.
principal no puede referirse a x en absoluto.
No sabe lo que es.
Ninguna otra función, de hecho, si tenía funciones adicionales aquí,
podría referirse a x.
>> Del mismo modo, los resultados que tengo de color azul, es local sólo para principal.
Sólo sabe lo principal el resultado variable es.
el triple no puede usarlo.
>> Ahora bien, como ya he mencionado, existen variables globales.
Si se declara la variable fuera de cualquier función,
todas las funciones en el programa puede referirse a ella.
Así que en este caso me he destacado en verde una declaración de variable global.
En este caso, el ser variable declarada
se llama global, sólo para ser muy clara al respecto.
Es de tipo float.
Y yo asigno el valor 0.5050.
>> Se dará cuenta de que, en principal y en triple, soy capaz de referirse a lo global.
Y de hecho, si voy a través del programa como se ha indicado, los principales primeras llamadas triple,
multiplica triples mundiales por 3, que establece su valor a 1.5 y tantos años,
1,51 o algo así, y entonces principal también imprime el valor
del global.
Así principal no imprimirá 0.5050, que imprimirá tiempos globales 3, 1.51.
Así que tienes que tener cuidado cuando se trabaja con variables globales.
Si bien son muy flexibles en ser capaz de pasar información
alrededor de modo que cada función puede usarlo,
también puede tener alguna consecuencias peligrosas
si los cambios Una de las funciones el valor de una variable
antes de esperar que sea cambiado.
>> ¿Por qué importa esta distinción?
¿Por qué nos importa si algunas variables son locales y otras son globales?
Bueno, en su mayor parte, las variables locales en C son lo que se llama pasa por valor
cuando hacemos una llamada a la función.
¿Que significa eso?
>> Bueno, cuando se pasa una variable por valor, el destinatario de la llamada, que
es otra manera de decir la función que está recibiendo la variable que
se pasa en como entrada, que en realidad no recibir esa misma variable.
Recibe su propia copia de la misma para trabajar.
Esta es una distinción muy importante.
Acabamos de ver hace un segundo que con las variables globales,
si manipulamos el mundial variable en una función, el efecto
en que una función lleva a través de a cualquier otra función.
>> Pero con las variables locales, eso no es cierto.
Cada función cuando recibe como entrada las variables
recibir copias de esas variables, no las propias variables.
Entonces, ¿cuál es el efecto secundario de esto?
Eso significa que la variable en la persona que llama, la función que
es hacer la llamada a la función, es sin cambios menos que lo sustituya.
>> Por ejemplo, en el código foo no se cambia en absoluto.
Int foo es igual a 4, llame triples de foo, en el interior de triple,
esperaríamos que foo haría se multiplicará por 3 y regresó,
pero hay en realidad ningún efecto.
>> Aquí, sin embargo, una diferencia muy sutil.
Esto tiene el efecto que queremos.
¿Ve usted por qué?
Estamos reemplazando foo en principal en esta ocasión.
>> Así int foo es igual a 4, foo es igual triples foo, cuando hacemos ese llamado,
triples obtiene su propia copia de foo, su propia copia de 4.
Dice volver 4 veces 3, o lo que sea la variable se pasa en tiempos 3.
Y luego le asignamos el retorno valor de triple foo nuevo.
Así que esto realmente podría sobrescribir foo.
Esta es la única manera de hacerlo esto con la variable local.
Así que ahora si añadimos otra línea de código aquí
al final de principal para imprimir el valor de foo,
sería de hecho imprimir 12.
>> Ámbito de la variable es generalmente no demasiado de un problema
si el nombre la totalidad de su variables de cosas diferentes.
Pero puede obtener el tipo de desagradable si el mismo nombre de variable
aparece en múltiples funciones, que va a pasar mucho.
Si alguna vez hacer el trabajo en el mundo real, donde
se está trabajando en colaboración programas y personas en diferentes equipos
están trabajando juntos para escribir el mismo programa o el mismo conjunto de programas,
que van con frecuencia variable de reutilización nombres, particularmente los comunes
como x, y, i, j, y así sucesivamente.
>> Pero cuando las variables tienen del mismo nombre, cuestiones de alcance
puede ser un poco más difícil de analizar.
Por ejemplo, ¿sabe usted lo que se imprime
al final de este programa en particular?
Tomate un minuto.
Pausa el video y leer a través de este programa.
Se puede ver en la parte superior que tener una declaración de la función
para una función llamada de la subasta.
Esa función toma un solo parámetro, un número entero que llamamos x.
Y da salida a un entero.
Ese es el tipo de retorno al inicio.
>> Entonces tenemos principal, un par de líneas de código en principal, el último de los cuales
es una sentencia print.
Y recuerde, esa es la cuestión aquí.
¿Qué es en realidad va a ser impresa al final de esta función?
Y luego tenemos LOS definición de la subasta a continuación.
>> Así que toma un minuto, paso a paso el código, trace las cosas.
¿Sabes lo que se va a imprimir en Al final de este programa en particular?
>> Correcto.
Con suerte, usted ha tomado unos segundos para tratar de analizar éste hacia fuera.
Hagámoslo juntos.
>> Así que me he cruzado a cabo la subasta de declaración en la parte superior existe.
Era una especie de distracción.
No es su propia variable.
No tiene su propio ámbito.
Es sólo una función declaración, por lo que a efectos
de tratar de analizar lo que está sucediendo en este programa,
puede ser que también acaba de evitarlo.
>> Ahora que tenemos en este caso, el razón de este problema es complicado
es porque tenemos variables locales en tanto principal y de incremento, cada uno de los cuales
se llama x.
Y, por supuesto, el quid de la cuestión es tratando de suss que se cambia x
y cómo se ve modificado.
Así que he coloreé cada instancia de x que es local para roja principal.
Y he coloreé cada instancia de x eso es local para incrementar azul.
>> Aviso en esa tercera línea de principal, y es igual a la subasta
x, ese incremento no está siendo x del principal pasado, o la x roja.
Está consiguiendo aprobó una copia del mismo.
Y sólo va a trabajar con que copia de la misma, la x azul.
Si usted es matemáticamente inclinado, usted puede ser
vez han pensado en esto como x sub m para sub principal y x i para la subasta.
Pero es la misma idea.
x sub m, o el rojo de x en la diapositiva anterior,
son las variables que son local-- es la instancia de x en lugar de que
es local a la principal y sub x i, o la las variables de color azul en la diapositiva anterior,
son los casos de que x son locales para incrementar.
>> Por lo tanto, se haya podido averiguar qué esta función impresa al final?
Soy Doug Lloyd, y esto es CS50.