Bienvenidos sean a este post, hoy hablaremos sobre estos temas.
Ya hemos hablado sobre los arrays en este post y los apuntadores en este post pero que opinan si les dijo que tienen mas temas en comun de lo que pensamos, no son identicos pero si tienen muchas coincidencias, por lo pronto resumiendo a los arrays sabemos que poseen varios elementos y podemos acceder a ellos mediante su posicion o indice, y sabemos que un apuntador apunta a una direccion de memoria donde esta el elementto asociado, por esta razon en algunas detereminadas circunstancias nos resultara mas conveniente acceder a una posicion de un array mediante un apuntador que la posicion en si.
Vamos a suponer que tenemos el siguiente caso:
const int tamArreglo = 5;
int arreglo[5] = {1,2,3,4,5};
int* a_arreglo1 = NULL;
int* a_arreglo2 = NULL;
Aqui tendremos cuatro elementos con sus respectivos espacios en memoria, ya sea una cconstante que podemos usar para definir el tamaño del array pero para esta ocasion no lo usamos pero si ttenemos un array de cinco elementos y a su vez dos apuntadores, todos sabemos que no podemos controlar en que parte de la memoria se ubicaran cada uno de ellos pero si estamos seguros de que los elemetnos del array son vakires en bloques continuos de memorias comenzando con el nombre del array dado que este representa la direccion de memoria del elemento cero del mismo, esto suena similar a un apuntador, no? de hecho si no usaramos los indicadores de posicion este seria tratado como un apuntador, por esto debemos considerar al array como una ubicacion de variable especial, el cual es el comienzo del bloque del array, con esto comentado podemos hacer lo siguiente:
a_arreglo1 = arreglo;
Ccn esto podemos considerear que el apuntador esta apuntando al elemento 0 de arreglo, otra forma de hacer lo mismo es la siguiente:
a_arreglo2 = arreglo[0];
Y a su vez otra orma de hacerlo es la siguiente:
a_arreglo2 = &(arreglo[0]);
En todos los casos hacemos que ambos apuntadores apunten al elemento 0 del array llamado arrreglo, por esto podemos decir que un array en su elemento 0 es un apuntador a una direccion de memoria donde esta la variable y despues por medio de las distintas posiciones del array iremos a las distintas direccciones, al igual que vimos anteriormente la direccion de memoria nunca cambiara aunque si los valores almacenados.
Con esto ya tenemos comentado como se parecen arrays y apuntadores pero veamos como recuperar la informacion, para ello primero repasaemos como hacerlo para un array normal:
arreglo[2];
Para recuperar la infformacion en un apuntador lo haremos de la siguiente manera:
*(a_arreglo1 + 2)
Ya vimos la teoria ahora pasemos a la practica y para ello vamos a crear un ejemplo, lo primero sera generar un nuevo archivo que llamaremos ejjemplo15.c y le agregaremos el siguiente codigo:
ejemplo15.c
#include <stdio.h>
int main()
{
int arreglo[] = {1, 2, 3, 4, 5};
int* a_arreglo = arreglo;
for(int i=0; i < 5; i++)
printf("arreglo[%i]: %i\n", i, *(a_arreglo + i));
return 0;
}
En este codigo primero definiremos un array, recuerden que no es necesario asignar un tamaño si lo creamos con los valores, despues crearemos un apuntador y le asignaremos el array anterior, por ultimo tenemos un bucle for donde por medio de este contaremos las cinco posiciones del array, en el bucle mostraremos cada uno de los valores pero a traves de la posicion del apuntador, observen como es la forma de obtenerlo, al igual que los apuntadores debemos seguir usando el operador desreferenciador y donde el valor que sumamos para indicar la posicion es el valor del bucle, con esto comentado podemos pasar a compilarlo y ver su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo15
arreglo[0]: 1
arreglo[1]: 2
arreglo[2]: 3
arreglo[3]: 4
arreglo[4]: 5
tinchicus@dbn001vrt:~/lenguajes/C$
Como pueden ver trabajo de la misma forma que utilizar un array de manera estandar, si bien trabaja de la misma forma porque tecnicamente podemos cambiar los valores en cada ubicacion de memoria pero la direcccion de memoria nunca cambiara, esto nos resultara mas practico para algunas determinadas operaciones de las cuales hablaremos mas adelante.
En resumen, hoy hemos visto la relacion entre array y apuntadores, como se asemejan, como podemos hacerlos trabajar juntos, y algunos ejemplos mas para ver como trabaja, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
