Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


9.6. Punteros y arrays

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;   
}