Supón que tienes una declaración como ésta:
int table[] = {10, 20, 30, 40, 50};
Si imprimes table[0]
, obtendrás el valor
10
. Ahora bien, ¿qué pasa si imprimes el valor
*table
? ¿Imprimirá algo o dará error? Si crees que dará un
error porque table
es un array y no un puntero, te equivocas;
el nombre de un array es tratado en C como un puntero. Si imprimes
*table
, obtendrás también 10
.
Puedes hacer que un puntero apunte al primer elemento de un array asignando simplemente el nombre del array a la variable puntero. Si un array es referenciado por un puntero, podrás acceder a los elementos en el array con ayuda del puntero, como muestra el siguiente ejemplo:
#define SIZE 10 char *ptr_char; char chars[SIZE]; ptr_char = chars;
El nombre del array es un atajo de acceder a la
dirección del primer elemento del array. Siguiendo con el ejemplo, la última
línea podría sustituirse por ptr_char = &chars[0];
.
Así mismo, puedes incrementar o decrementar un puntero. Si
lo incrementas, la dirección que tiene como valor incrementa:
ptr_char++;
Esto no significa que el puntero se incremente siempre
en 1; se incrementa en tantos bytes como tamaño ocupe la variable a la que
referencia. De esta manera, chars[2]
y *(ptr_char +
2)
dan el mismo resultado.
Teniendo esto en cuenta, calculad la media entre los elementos
de dos arrays. Se pide para ello que imprimáis por pantalla los elementos
de dos arrays y que calculéis e imprimáis la media entre cada par de
elementos. Para ello, cread en vuestro entorno de desarrollo un fichero
llamado arrays_as_pointers.c
, e implementad en él lo
siguiente (veréis que es el mismo programa que el de arrays básicos, pero
ahora tendréis que enviar el array en forma de puntero):
Una función que imprima por pantalla los elementos de un
array de enteros: void print_array(int *array);
Una segunda función que calcule la media entre cada par
de elementos de un array y que la vaya imprimiendo por pantalla:
void calculate_average(int *array1, int *array2);
. Para
la primera posición de cada array, sumará los dígitos y los dividirá por
dos, y ese resultado lo sacará por pantalla, y así con el resto de
posiciones.
Una función main
que declare e inicialice
dos arrays de 10 enteros con los dígitos que queráis, por ejemplo
int array1[] = {1,5,7,3,12,...};
, y que haga uso de la
primera función para imprimir los arrays y de la segunda para calcular
la media.