Hola y bienvenidos.
Vamos a ver a continuación un ejemplo de alcance de variables en el lenguaje C.
Están listos?
Vamos.
Bien.
Uno de los conceptos importantes que podemos manejar en el lenguaje es que tenemos el concepto de variables
globales.
Esto quiere decir que vamos a poder definir una variable fuera de cualquier función, incluyendo la
función principal.
Así que para definir una variable global.
Simplemente fuera de cualquier método, incluyendo el método principal.
Como podemos observar, podemos definir cualquier variable.
Por ejemplo, en este caso voy a definir una variable de tipo entero llamada variable global.
Cualquier nombre que deseemos.
Y esto tiene la ventaja que esta variable la vamos a poder acceder desde cualquier función, ya sea
la función principal o también desde cualquier otra función que nosotros definamos, ya que precisamente
su alcance es global, es decir, que lo vamos a poder acceder en todas las funciones que nosotros creemos.
Bien, esto por un lado, entonces ya tenemos definido el concepto de variable global.
Ahora, dentro de nuestro método main, voy a definir otra variable.
Va a ser una variable local.
Al método Main.
Así que definimos una variable variable.
Local al método Main.
Voy a utilizar nombres muy explícitos para que sepamos exactamente a que nos referimos.
Así que esta variable la vamos a poder acceder desde cualquier otra función en un momento más.
La vamos a utilizar dentro del método main, pero también podemos definir variables dentro de nuestros
métodos.
Así que esta variable, debido a que la estamos definiendo dentro de nuestro método main, se convierte
en una variable local al método main y lo vamos a poder utilizar desde el momento que se define hasta
que termine de ejecutarse nuestro método main.
Así que podemos observar que este bloque de código es el tiempo de duración que va a tener esta variable
desde la línea ocho.
Como podemos observar, esta sería la línea ocho hasta la última línea donde termina de ejecutarse nuestro
método main.
Así que hasta el momento en memoria tendríamos lo siguiente Por un lado, podemos observar que fuera
de nuestro método main, ahora tenemos una nueva sección, una sección de variables globales.
Así que esta variable global la vamos a poder acceder desde cualquier otro método.
Si tenemos más métodos, entonces todos estos métodos van a poder acceder a esta variable global, ya
que el alcance global es el mayor alcance de todos, y entonces también estaríamos definiendo dentro
de nuestro método main.
Estamos definiendo la variable local, pero esta variable podemos observar que está restringida solamente
al tiempo de duración en que se ejecute nuestro método principal.
Una vez que termina de ejecutarse este método.
Esta función entonces también se elimina de memoria esta variable y por lo tanto ya no podemos acceder.
Y por último, qué sucede si definimos una función?
En este caso voy a definir una función.
Simplemente se llama mi función y dentro de esta función puedo definir la variable, ya sea dentro de
la función o como parámetro puedo definir también mi variable.
Así que en este caso la voy a definir como un parámetro variable local a la función.
Así que cuando se ejecute la función en este momento se estaría creando en memoria esta variable.
Así que en esta línea siete estaría modificando el valor de esta variable por el valor de 40.
Bien, y entonces si mandamos a llamar nuestra función, voy a mandar a llamar la función.
Recordemos que si no se manda a llamar una función, entonces nunca se ejecuta y le voy a pasar algún
valor.
Por ejemplo en este caso el valor de 30 para que se inicializa con este valor, pero posteriormente
dentro de mi función voy a modificar su valor al valor de 40.
Así que hasta el momento tenemos el siguiente código.
En la línea cuatro estamos definiendo nuestra variable global, así que esta variable global la podemos
acceder desde cualquier otro método, incluyendo el método main.
Posteriormente estamos definiendo nuestra función, pero se manda llamar hasta la línea 14.
Así que de momento todavía nos está mandando a llamar esta función.
Posteriormente tenemos nuestro método principal.
Si se ejecuta nuestro programa, entonces se crea en la línea 12, nuestra variable local main con el
valor inicial de twenty.
Posteriormente, en la línea 14, si se ejecuta, se manda llamar nuestra función y entonces se inicializa
nuestra variable local Función con el valor inicial de 30.
Podemos observar que también entonces desde esta función podríamos acceder a la variable global sin
ningún problema.
Y entonces podemos observar que tanto la función de main como la función que hemos definido pueden acceder
a la variable global sin ningún problema y posteriormente, si llegamos a ejecutar la línea siete,
entonces se modifica el valor de la variable local.
También podríamos hacer modificaciones sobre la variable global en cualquiera de estos métodos.
Así que si hacemos algún cambio.
Por ejemplo.
En este caso desde el método de mi función, si hago algún cambio, le voy a asignar ahora el valor
de 50.
Entonces, si se ejecuta la línea ocho.
Entonces ahora la variable global va a tener en lugar del valor de diez, se modifica al valor de 50.
Así que podemos observar que esta variable global la podemos acceder desde cualquier función.
También, si después de mandar a llamar la función hacemos algún cambio sobre la variable global pero
dentro del método principal.
Ahora voy a cambiar su valor por el valor de 60.
Entonces, en primer lugar, tiene que determinarse de ejecutar nuestra función.
Termina de ejecutarse la línea ocho.
Ahora la variable global ya vale 50.
Termina de ejecutarse nuestra función.
Regresamos el control a la línea 15 y entonces sí se ejecuta la línea 17.
Tenemos lo siguiente Se quita de memoria nuestra función y ahora la variable global tiene el valor de
60.
Podemos ver que entonces desde cualquier función, ya sea la función que hemos definido o en este caso
también la función principal, podemos acceder a una variable global.
Pero lo que sí no podemos hacer es que, por ejemplo, desde el método principal, si queremos acceder
a esta variable que hemos definido como parámetro, obviamente.
En este caso, si no podemos acceder a esta variable, ya que esta variable es una variable local a
nuestra función.
Incluso si hemos definido también aquí variables dentro de nuestra función, no se pueden acceder desde
fuera de otra función, ya que estas variables solamente son locales.
A este método, al método donde se definieron y de ahí el concepto de alcance de variables.
Obviamente ya lo último que podríamos hacer para comprobar estos valores es simplemente mandar a imprimir
sus valores.
Imprimimos los valores, pero básicamente son los valores que ya tenemos en memoria.
Así que una vez que hemos terminado de ejecutar, vamos a mandar a imprimir.
Imprimimos la variable local al método Main.
Es una variable de tipo entero.
Y entonces mandamos a imprimir este valor.
Debería imprimir el valor de 20.
No hemos modificado en ningún otro lado el valor de esta variable.
Pero solamente se podría acceder dentro de este método principal.
No se puede acceder desde otro método.
Y posteriormente mandamos a imprimir la variable global.
Así que mandamos a imprimir.
La variable global, podemos ver que la estamos accediendo como si fuera cualquier otra variable definida
dentro de este método principal, pero es una variable que se definió fuera de este método y por lo
tanto se puede acceder desde cualquier otra función, ya que precisamente es una variable global.
Antes de ejecutar, vamos a agregar un salto de línea.
Ejecutamos y entonces podemos comprobar que una vez que ya hemos terminado de ejecutar nuestro programa,
la variable local tiene el valor de 20.
Este es el último valor que tiene esta variable.
Es lo que se van a imprimir y en la línea 20 se van a imprimir el valor de la variable global.
Y el último valor que tiene esta variable global fue la modificación que se hizo dentro del método principal
en la línea 17, después de que terminó de ejecutarse nuestra función.
Entonces tenemos el valor de 60 y es el último valor que imprime esta variable.
Así que ese es el concepto de alcance de variables.
Básicamente es el tiempo de duración de una variable, pero también podemos observar que va a tener
restricciones desde donde podemos acceder a estas variables.
Así que un bloque de código, como puede ser una función, restringe el tiempo de vida de una variable
y por ello el concepto de alcance de variables.
Bien, pongan en práctica lo que hemos visto y continuamos en la siguiente lección.
Saludos.