En C hay muy poca diferencia “interna” entre un puntero y un array. En muchas ocasiones, podremos declarar un dato como array (una tabla con varios elementos iguales, de tamaño predefinido) y recorrerlo usando punteros. Vamos a ver un ejemplo:
/*---------------------------*/
/* Ejemplo en C nº 76: */
/* C076.C */
/* */
/* Arrays y punteros (1) */
/* */
/* Curso de C, */
/* Nacho Cabanes */
/*---------------------------*/
#include
int main() {
int datos[10];
int i;
/* Damos valores normalmente */
for (i=0; i<10; i++)
datos[i] = i*2;
/* Pero los recorremos usando punteros */
for (i=0; i<10; i++)
printf ("%d ", *(datos+i));
return 0;
}
Pero también podremos hacer lo contrario: declarar de forma dinámica una variable usando “malloc” y recorrerla como si fuera un array:/*---------------------------*/
/* Ejemplo en C nº 77: */
/* C077.C */
/* */
/* Arrays y punteros (2) */
/* */
/* Curso de C, */
/* Nacho Cabanes */
/*---------------------------*/
#include
#include
int main() {
int *datos;
int i;
/* Reservamos espacio */
datos = (int *) malloc (20*sizeof(int));
/* Damos valores como puntero */
printf("Uso como puntero... ");
for (i=0; i<20; i++)
*(datos+i) = i*2;
/* Y los mostramos */
for (i=0; i<20; i++)
printf ("%d ", *(datos+i));
/* Ahora damos valores como array */
printf("\nUso como array... ");
for (i=0; i<20; i++)
datos[i] = i*3;
/* Y los mostramos */
for (i=0; i<20; i++)
printf ("%d ", datos[i]);
/* Liberamos el espacio */
free(datos);
return 0;
}