
Tenemos el siguiente código erróneo:
Código
#include <stdio.h> void dosomething(int *ptr); void main() { int *p; dosomething(p) } /* passed by reference */ void dosomething(int *ptr){ int temp=32+12; *ptr = temp; }
Está mal porque el puntero *p no puede almacenar el valor 44 (32+12), sino que debe almacenar una dirección de memoria.
Dos soluciones:
- Primera:
Código
#include <stdio.h> void dosomething(int *ptr); void main() { int a; int *p=&a; dosomething(p) } /* passed by reference */ void dosomething(int *ptr){ int temp=32+12; *ptr = temp; }
Es correcto porque a *p le asignamos la dirección de memoria de a, y al hacer *ptr = temp la variable a pasará a valer 44.
- Segunda:
Código
#include <stdio.h> void dosomething(int *ptr); void main() { dosomething(p) } /* passed by reference */ void dosomething(int *ptr){ int temp=32+12; *ptr = temp; }
Correcta porque al puntero *p se le indica que apunte a una dirección de memoria (asignada por malloc) que podrá guardar un valor de tipo int, en este caso almacenará el valor 44.
¿Está todo bien entendido?
