Buenas. Quiero ver si he entendido este pequeño problema, así que voy a decir lo que está mal o lo que está bien y vosotros me dais el visto bueno
Tenemos el siguiente código erróneo:
#include <stdio.h>
void dosomething(int *ptr);
void main() {
int *p;
dosomething(p)
printf("%d", *p
); /* will this work ? */ }
/* 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: #include <stdio.h>
void dosomething(int *ptr);
void main() {
int a;
int *p=&a;
dosomething(p)
printf("%d", *p
); /* will this work ? */ }
/* 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.
#include <stdio.h>
void dosomething(int *ptr);
void main() {
dosomething(p)
printf("%d", *p
); /* will this work ? */ }
/* 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?