Hola y bienvenidos.
Vamos a ver a continuación el concepto de paso por referencia en el lenguaje C.
Están listos?
Vamos bien, ya hemos visto anteriormente el concepto de paso por valor y ahora vamos a ver el concepto
de paso por referencia.
Para ello, la diferencia es que vamos a aplicar el concepto de apuntadores que ya hemos estudiado anteriormente.
Así que si no han revisado este tema, va a ser muy importante que lo estudiaran a profundidad, ya
que la base para el concepto de paso por referencia va a ser el uso de apuntadores.
Así que una vez dicho esto, vamos a definir una función.
En este caso, esta función se va a llamar paso por referencia y en lugar de definir una variable simple,
vamos a utilizar un apuntador.
Ya sabemos que en primer lugar especificamos el tipo de dato de la variable a la cual queremos apuntar.
Posteriormente ponemos asterisco y finalmente el nombre de la variable apuntador.
Posteriormente, de manera interna, vamos a intentar realizar un cambio dentro de esta función y debido
a que ya sabemos cómo aplicar el concepto de referencia, entonces cualquier modificación que hagamos
utilizando la variable de apuntador utilizando el concepto de referencia, entonces sí va a modificar
el valor de la variable más externa, ya que estamos apuntando la dirección de memoria de la variable
más externa y con esa sintaxis estamos modificando el valor de la variable a la cual estamos apuntando,
en este caso a la variable más externa.
Bien, posteriormente terminamos de definir nuestra función y vamos a comenzar con la función principal.
En la función principal definimos la variable de argumento, cualquier valor que deseemos.
Posteriormente mandamos a llamar la función de paso por referencia, pero recordemos que la variable
de apuntador para que pueda funcionar correctamente le tenemos que pasar una dirección de memoria.
Por ello, en este caso no solamente pasamos el valor de la variable, sino que le pasamos la dirección
de memoria.
Por ello es que tenemos que anteponer el ampersand a nuestra variable.
Y una vez que hemos hecho esto, por último, vamos a mandar a imprimir el valor de la variable de argumento
simplemente para comprobar que los cambios realizados en la función sí afectaron a la variable más externa,
en este caso a la variable de argumento.
Bien.
Y entonces, una vez que se ejecuta nuestra función principal, tenemos en memoria lo siguiente se define
nuestra variable de argumento en cierta dirección de memoria se almacena el valor de en la dirección
de memoria 0X333.
Posteriormente, en la siguiente línea mandamos a llamar la función de paso referencia.
Se pone en pausa la ejecución de la función principal y entonces se pasa a la referencia de la variable
de argumento.
Por lo tanto, la variable de parámetro ahora apunta exactamente a la misma dirección de memoria donde
se encuentra la variable de argumento.
Esto quiere decir que cualquier modificación que hagamos en esta variable, entonces también va a afectar
el valor de la variable más externa, siempre y cuando utilicemos el concepto de referencia.
Bien, así que la variable de parámetro, como podemos observar, el valor que almacena es la dirección
de memoria de la variable de argumento.
Y ahora, si se ejecuta la función de paso referencia, entonces la variable de parámetro modifica el
valor de la referencia 0X333.
No es que modifique directamente el valor a través de la variable de argumento, sino que lo modifica
a través de la dirección de memoria a la cual está apuntando, en este caso un apuntador.
Realmente lo único que tiene es una dirección de memoria.
Así que con esta sintaxis utilizando de referencia, entonces accedemos a la dirección de memoria y
posteriormente con el asterisco accedemos al valor almacenado en esa dirección de memoria.
Y debido a que estamos aplicando el nuevo valor utilizando este operador de asignación, entonces se
sobrescribe el valor anterior.
Y ahora tenemos el nuevo valor, el valor de 20.
Y por último, si termina de ejecutarse nuestra función, se quita de memoria la variable de apuntador.
Pero debido a que ya realizamos un cambio sobre la dirección de memoria 0X33, la variable de argumento
sigue apuntando exactamente esa misma dirección de memoria.
Por ello, la última línea manda a imprimir ahora el valor de 20 y con esto comprobamos que los cambios
realizados en la función sí afectaron al valor de la variable más externa.
Así que, en conclusión, tenemos que los cambios hechos en la función sí afectan a la variable más
externa, ya que se recibió la referencia o dirección de memoria de la variable más externa.
Y ese es el concepto de paso por referencia.
A diferencia del ejemplo anterior, donde vimos el paso por valor en el cual no se aplicó en ningún
momento el concepto de apuntadores, en este caso, ya aplicando el concepto de apuntadores, podemos
observar que ya pudimos acceder a cierta dirección de memoria y entonces a través de la variable de
tipo apuntador, aplicando el concepto de referencia, sí pudimos modificar los valores de las variables
más externas y por ello este concepto va a ser bastante importante, ya que en el lenguaje C se aplica
en todo momento, sobre todo cuando estamos utilizando las funciones incorporadas en el lenguaje C.
Pero también vamos a ver que nosotros cuando definamos nuestras propias variables, podemos llegar a
aplicar también estos mismos conceptos.
Bien, vamos a detener hasta aquí y en el siguiente vídeo vamos a realizar este ejemplo para que todo
quede completamente claro, así que continuamos.
Saludos.