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
#include
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:
(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).