Hola y bienvenidos.
Vamos a ver un ejemplo para el manejo de apuntadores en el lenguaje C.
Están listos?
Vamos.
Bien, vamos a hacer algunas modificaciones.
Entonces ahora vamos a ver la copia, pero ya no de un valor, sino de la referencia de memoria.
En el lenguaje C, es decir, el tema de apuntadores.
Vamos a quitar todo nuestro código para comenzar desde cero.
En primer lugar, vamos a definir nuestra variable una variable A con el valor de diez.
Cualquier valor que deseemos asignarle y posteriormente vamos a definir una variable, pero que va a
ser un apuntador hacia la dirección de memoria donde se encuentra la variable A.
Para ello hacemos lo siguiente.
Entonces definimos.
Una variable apuntador.
Para ello hacemos lo siguiente Tenemos que utilizar el mismo tipo de dato de la variable a la cual queremos
apuntar.
Así que el apuntador también es de tipo entero.
Posteriormente ponemos asterisco y el nombre de la variable.
Con esto definimos un apuntador y posteriormente le pasamos la dirección de memoria de la variable a
la cual queremos apuntar.
Recordemos que si le pasamos directamente el valor de la variable, entonces lo que se copiaría sería
el valor de la variable a y entonces la dirección de memoria a la cual estaríamos apuntando sería una
dirección errónea.
Así que tenemos que utilizar la siguiente sintaxis ampersand y posteriormente a Con esto lo que estamos
pasando es la dirección de memoria.
Estamos indicando que en primer lugar obtenemos la dirección de memoria y posteriormente se le asignamos
a la variable apuntador la variable b.
Y si vemos nuestra animación tenemos lo siguiente Podemos ver varias cosas.
En primer lugar tenemos la variable A y la variable b definida dentro de nuestro método main.
Ahora la variable A tiene una dirección de memoria con terminación b, c, c y por otro lado, la variable
b se encuentra en otra dirección de memoria.
Por lo tanto, son variables distintas, pero podemos observar algo interesante en la variable b indica
que es un apuntador hacia una variable de tipo entero.
Así que.
Por ello.
En primer lugar, tenemos que especificar el tipo de dato de la variable a la cual queremos apuntar.
Ahora, si se ejecutara la línea cinco, entonces en memoria tendríamos lo siguiente Podemos observar
que ahora en memoria, la variable A está almacenando el valor de días y esa es la dirección de memoria
donde se encuentra esta variable.
Ahora, por otro lado, si ejecutamos la línea siete, entonces podemos observar que lo que está almacenando
la variable b es precisamente la dirección de memoria de la variable A, Así que exactamente este mismo
valor con terminación de cuatro es lo que tiene como valor la variable b, la terminación de cuatro.
Y por ello vemos esta flecha precisamente que está apuntando a nuestra variable a, pero apunta directamente
a la dirección de memoria de la variable a.
Y entonces, básicamente con esta sintaxis estamos definiendo una variable que apunta a una dirección
de memoria de otra variable.
Es decir, el concepto de apuntador.
Ahora, si queremos realizar una modificación del valor almacenado en la variable A, podemos hacer
lo siguiente Modificamos el valor de a.
O lo que es lo mismo, asterisco b.
Cualquiera de las dos.
Sintaxis.
Vamos a poder modificar este valor.
Pero obviamente aquí lo interesante sería utilizar la sintaxis conocida como de referencia.
Así que en este caso le vamos a asignar ahora el valor de twenty y a esta sintaxis de asterisco variable.
Se conoce como des referencia, es decir, que queremos acceder al valor de la dirección de memoria
a la cual estamos referenciando.
Eso es lo que significa de referencia.
Y entonces, si llegáramos a ejecutar la línea diez en memoria, sucede que la variable A ahora tiene
el valor de 20, pero fue modificado a partir de la variable de apuntador.
Así que utilizando la dirección de memoria a la cual estamos apuntando, en primer lugar, llegamos
a la dirección de memoria y posteriormente a través de asterisco B.
Entonces accedemos al valor almacenado en esta dirección de memoria.
Por ello es que podemos realizar este cambio utilizando la sintaxis de referencia y esto va a ser una
de las cuestiones más poderosas en el lenguaje C ya que vamos a poder acceder directamente a valores
de cualquier variable que tengamos en memoria, apuntando a cualquier dirección de memoria.
Bien, entonces, por último, si mandamos a imprimir los valores en este caso, ya sea utilizando la
variable A o la variable b, pero utilizando la de referencia, vamos a poder acceder al valor de twenty.
Vamos a comprobarlo.
Si utilizamos la variable A directamente es un valor de tipo entero al que vamos a acceder.
Así que esta será una forma para imprimir el valor de Twenty.
Y por otro lado también vamos a imprimir el valor de B, pero recordemos que ese valor tiene que ser
utilizando la de referencia, no es directamente la variable b, ya que vamos a comprobar que si solamente
utilizamos la variable b imprimiría la dirección de memoria.
Pero eso de momento no es lo que queremos, sino que queremos imprimir el valor almacenado en esta dirección
de memoria.
Mandamos a imprimir un valor de tipo entero, pero aplicando el concepto de de referencia.
Así que ponemos asterisco y posteriormente la variable apuntador asterisco b.
Vamos a ejecutar y entonces podemos observar que tanto utilizando directamente la variable A podemos
acceder al valor de twenty, pero también utilizando el concepto de apuntadores.
El concepto de referencia accedemos directamente también a este mismo valor el valor de 20.
Así que en primer lugar, esta sintaxis lo que hace es acceder a la dirección de memoria a la cual está
apuntando y posteriormente con el asterisco y posteriormente con el asterisco, recuperamos el valor
almacenado en esta dirección de memoria.
Ahora, qué pasa si queremos imprimir las direcciones de memoria?
Para comprobar que ambas variables están apuntando exactamente la misma dirección de memoria, podemos
hacer lo siguiente Vamos a mandar a imprimir la referencia de memoria de la variable A, pero recordemos
que para imprimir una dirección de memoria utilizamos el especificado de formato porcentaje P y recordemos
que está especificado de formato porcentaje P.
Significa que va a imprimir una dirección de memoria, un apuntador.
Así que por ello no utilizamos porcentaje de sino porcentaje P y posteriormente imprimimos en primer
lugar la dirección de memoria de la variable A.
Con esa sintaxis ya sabemos que imprimimos la dirección de memoria de la variable A y posteriormente
si queremos comprobar.
Mandar a imprimir el valor que almacena en la variable b.
Imprimimos también la referencia de B, pero es la referencia a la cual apunta la variable b.
Por ello también va a ser un valor de tipo apuntador.
Es una memoria, una referencia de memoria y ponemos directamente la variable b.
Así que si ejecutamos podemos observar que con ambas sintaxis estamos mandando a imprimir la dirección
de memoria, en primer lugar de la variable A que tiene una terminación de 18.
Y podemos comprobar entonces que lo que almacena realmente en la variable b también es una dirección
de memoria.
En este caso es exactamente la misma dirección de memoria donde se encuentra la variable a.
Y por último, si quisiéramos mandar a imprimir a su vez la dirección de memoria de la variable B,
ya no la dirección de memoria a la cual apunta, sino su propia dirección de memoria.
La referencia de B.
Utilizamos el especificados de formato de apuntador, pero ahora, en lugar de proporcionar directamente
la variable B, vamos a mandar imprimir la dirección de memoria donde se encuentra la variable b.
Así que vamos a ejecutar y entonces podemos observar que esta es la dirección de memoria donde se encuentra
la variable a.
Posteriormente.
Esta es la dirección de memoria que almacena como valor esta variable B.
Así que este es el contenido que almacena la variable b, pero a su vez la variable b tiene su propia
dirección de memoria y podemos comprobar que esta es otra dirección de memoria.
Este es el valor que almacena la variable b, la cual apunta a la dirección de memoria de la variable
A, Así que por ello es importante que tengamos claro cada uno de estos conceptos.
En un principio puede llegar a ser un poco confuso, pero conforme vamos a ir avanzando todo esto va
a quedar más claro, ya que lo vamos a poner en práctica en varios de los ejercicios que vamos a ver
a continuación.
Es el concepto de apuntadores.
Ponganlo en práctica y nos vemos en la siguiente lección.
Saludos.