AnteriorPosterior

9.3. Repasemos con un ejemplo sencillo

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

9.3. Repasemos con un ejemplo sencillo

El ejemplo anterior era “un caso real”. Generalmente, los casos reales son más aplicables que los ejemplos puramente académicos, pero también más difíciles de seguir. Por eso, antes de seguir vamos a ver un ejemplo más sencillo que nos ayude a asentar los conceptos: Reservaremos espacio para un número real de forma estática, y para dos números reales de forma dinámica, daremos valor a dos de ellos, guardaremos su suma en el tercer número y mostraremos en pantalla los resultados.

/*---------------------------*/
/*  Ejemplo en C nº 73:      */
/*  C073.C                   */
/*                           */
/*  Manejo básico de         */
/*  punteros                 */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
#include <stdlib.h>
 
int main() {
  float n1;           /* Primer número, estático */
  float *n2, *suma;   /* Los otros dos números */      
 
  n1 = 5.0;           /* Damos un valor prefijado a n1 (real) */
  n2 = (float *) malloc (sizeof(float)); /* Reservamos espacio para n2 */
  *n2 = 6.7;          /* Valor prefijado para n2 (puntero a real) */
 
  suma = (float *) malloc (sizeof(float)); /* Reservamos espacio para suma */
  *suma = n1 + *n2;   /* Calculamos la suma */
 
  printf("El valor prefijado para la suma era %4.2f\n",
    *suma);
 
  printf("Ahora es tu turno: Introduce el primer número ");
  scanf("%f",&n1);   /* Leemos valor para n1 (real) */
 
  printf("Introduce el segundo número ");
  scanf("%f",n2);    /* Valor para n2 (puntero a real) */  
 
  *suma = n1 + *n2;  /* Calculamos nuevamente la suma */
 
  printf("Ahora la suma es %4.2f\n", *suma);
 
  free(n2);          /* Liberamos la memoria reservada */
  free(suma);
 
  return 0;  
}
 

Las diferencias son:

  • n1 es un “float”, así que le damos valor normalmente: n1 = 0; Y pedimos su valor con scanf usando & para indicar en qué dirección de memoria se encuentra: scanf("%f", &n1);
  • n2 (y también “suma”) es un “puntero a float”, así que debemos reservarle espacio con “malloc” antes de empezar a usarlo, y liberar con “free” el epacio que ocupaba cuando terminemos de utilizarlo. Para guardar un valor en la dirección de memoria “a la que apunta”, usamos un asterisco: *n2 = 0; Y pedimos su valor con scanf, pero sin necesidad de usar &, porque el puntero ES una dirección de memoria: scanf("%f", n2);

(En este ejemplo, no hemos comprobado si el resultado de “malloc” era NULL, porque sólo pedíamos espacio para dos variables, y hemos dado por sentado que sí habría memoria disponible suficiente para almacenarlas; en un caso general, deberemos asegurarnos siempre de que se nos ha concedido ese espacio que hemos pedido).

Actualizado el: 27-07-2014 14:10

AnteriorPosterior