Hola y bienvenidos.
Vamos a ver a continuación un ejemplo de paso por referencia en el lenguaje C.
Están listos?
Vamos.
Bien.
Vamos a limpiar completamente nuestro código para empezar desde cero.
Así que solamente vamos a dejar nuestro método Main y este va a ser el ejemplo de paso por referencia.
Para ello, vamos a definir una función.
La función no va a regresar ningún tipo de información, se va a llamar cambiar valor.
Y el objetivo de esta función es que podamos comprobar si utilizando el concepto de paso por referencia,
podemos modificar desde esta función el valor de la variable más externa.
Así que para ello, el parámetro que vamos a definir ya no va a ser una variable de tipo entero, solamente
una variable simple, sino que vamos a aplicar el concepto de apuntadores precisamente para que podamos
recibir una referencia de memoria y no directamente un valor.
Así que para ello definimos nuestro apuntador.
Recordemos que en primer lugar especificamos el tipo de dato de la variable a la cual queremos apuntar.
Así que ese tipo de dato de la variable que vamos a apuntar va a ser una variable de tipo entero.
Posteriormente, utilizando la sintaxis de apuntadores, definimos nuestra variable de parámetro.
Así que con esta sintaxis, esta variable es un apuntador y utilizando el concepto de referencia.
Podemos modificar el valor de la variable.
La variable que estamos recibiendo de manera más externa.
Entonces utilizamos asterisco y posteriormente la variable de apuntador.
Y vamos a tratar de modificar el valor.
En este caso le asignamos un nuevo valor el valor de twenty.
Y debido a que estamos aplicando el concepto de apuntadores, entonces esto debe de ser posible.
Vamos a poder modificar de esta manera la variable más externa.
Ahora, desde la función principal vamos a definir nuestra variable de argumento.
Le asignamos, por ejemplo, el valor inicial de diez y ahora vamos a mandar a imprimir.
Antes de llamar la función.
Imprimimos el valor de nuestra variable.
La variable de argumento con el valor inicial de diez es un valor de tipo entero.
Almacenado en la variable de argumento.
Posteriormente vamos a mandar a llamar.
Nuestra función cambia el valor para comprobar si de manera interna nuestra función puede realizar un
cambio sobre la variable más externa.
Pero recordemos que de momento no vamos a pasar directamente el valor de la variable, ya que con esta
sintaxis estaríamos pasando una copia del valor de esta variable.
Pero debido a que estamos aplicando el concepto de apuntadores, entonces necesitamos pasar la dirección
de memoria y no directamente el valor de esta variable.
Por ello, ya sabemos que tenemos que anteponer el símbolo de ampersand para que con esta sintaxis pasemos
entonces la dirección de memoria a nuestra variable de apuntador y con esto se inicializa correctamente
nuestra variable de apuntador de parámetro.
Y por último, una vez que termina de ejecutarse esa función, vamos a comprobar el valor después de
llamar la función.
Bien.
Así que volvemos a imprimir nuestra variable del argumento simplemente para comprobar si se realizó
un cambio o no, pero antes de ejecutar, agregamos un salto de línea.
Y ahora vamos a ejecutar y podemos llevar entonces que antes de llamar la función, tenemos el valor
de then en nuestra variable de argumento.
Pero una vez que se manda a llamar nuestra función de manera interna utilizando el concepto de apuntadores,
entonces estamos modificando el valor de la variable más externa, ya que estamos apuntando exactamente
la misma dirección de memoria.
Por lo tanto, cualquier cambio realizado de manera interna, entonces también va a afectar a la variable
más externa.
Por lo tanto, en la línea 13, cuando volvemos a imprimir el valor de la variable de argumento, ahora
vemos el valor de 20.
Aunque esta variable de parámetro en este momento ya se destruyó.
Podemos comprobar que el apuntador.
Si puedo realizar un cambio sobre la misma dirección de memoria de la variable de argumento y vamos
a ver nuestra animación.
Si ejecutamos paso a paso este ejercicio, entonces tendríamos lo siguiente En primer lugar, al ejecutar
nuestra función principal en la línea diez, se crea nuestra variable de argumento con el valor inicial
de diez en cierta dirección de memoria, y esta variable se creó en cierta dirección de memoria.
Bien, posteriormente en la línea 11 se manda a imprimir antes de mandar a llamar la función y se imprimiría
el valor inicial de diez.
Ya que hasta este momento el valor de la variable de argumento tiene precisamente el valor de diez.
Posteriormente, en la línea 12 se manda a llamar nuestra función de cambiar valor, así que en memoria
se agrega a nuestra pila la llamada de la función cambia el valor y también se crean nuestras variables
que son los parámetros.
Pero recordemos que esta variable de parámetro a su vez es un apuntador hacia una variable de tipo entero,
ya que la variable más externa, en este caso la variable de argumento es una variable de tipo entero.
Por lo tanto, el tipo de dato del apuntador debe coincidir, ya que vamos a apuntar a una variable
precisamente de tipo entero y como siguiente paso se inicializa la variable de parámetro.
Entonces podemos observar en animación que el valor almacenado en nuestra variable de apuntador es el
valor de la dirección de memoria de la variable de argumento.
Por lo tanto, esta variable de parámetro apunta a la dirección de memoria de la variable de argumento.
Esto sucede en la línea cuatro.
Y ahora, si continuamos en la línea seis, entonces a partir de la variable de parámetro que está apuntando
a la misma dirección de memoria de la variable de argumento, vamos a realizar un cambio en lugar de
diez.
Ahora vamos a ver el valor de 20.
Así que podemos observar que aplicando el concepto de referencia, en primer lugar, vemos el valor
de la variable de parámetro.
Vamos a esa dirección de memoria y debido a que estamos aplicando el asterisco, entonces ahora sí modificamos
el valor almacenado en esta dirección de memoria.
Por lo tanto, se pierde el valor de then y se sobrescribe ahora por el valor de 20.
Ahora, como siguiente paso, se va a terminar de ejecutar la función cambia el valor, así que en memoria
se destruye la llamada de esta función y también se destruye la variable de apuntador.
Pero debido a que ya realizamos un cambio sobre la dirección de memoria con esa terminación, entonces
esta variable de argumento sigue accediendo a esta dirección de memoria y por lo tanto se va a mandar
a imprimir ahora el valor de Twenty.
Así que regresamos a la línea 12.
Ya no hay nada más que procesar aquí, ya que la función es de tipo void y entonces continuamos con
la línea 13.
Así que en este momento se manda a imprimir el valor de la variable de argumento y podemos observar
que el último valor que tiene esta variable es precisamente el valor de 20.
Ya la variable de apuntador dentro de la función hizo la tarea respectiva de modificar este valor y
entonces por ello ese cuando volvemos a mandar imprimir el valor de esta variable.
El último valor que tiene la variable de argumento es el valor de twenty.
Y con esto estamos poniendo en práctica el concepto de paso por referencia, ya que realmente aquí cuando
mandamos a llamar nuestra función de cambiar valor, estamos pasando la referencia de la variable y
de manera interna si podemos realizar cambios a esta variable, siempre y cuando estemos aplicando en
este caso el uso de apuntadores.
Bien, ese es el concepto de paso por referencia, póngala en práctica.
Y también si todavía tuvieran alguna duda, lo pueden ejecutar paso a paso.
Eso es todo por este video y continuamos en la siguiente lección.
Saludos.