AnteriorPosterior

9.6. Punteros y arrays

  Curso: Fundamentos de programación en C, por Nacho Cabanes

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 <stdio.h>
 
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 <stdio.h>
#include <stdlib.h>
 
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;   
}
 

Actualizado el: 27-07-2014 14:15

AnteriorPosterior