Título: Re:Pasar puntero de otro tipo a una funcion
Publicado por: KILLERJC en 09 de Diciembre de 2019, 20:50:21
Código: C
Funcion((float*)&Variable1);
Castearlo a un puntero float..
Citar
no puedo hacer directamente eso por que no se pasa correctamente.
No se que es "no se pasa correctamente" el problema que te va a decir el compilador es que los tipos no son iguales, y es obvio.
Aunque no considero correcto lo que estas intentado realizar, es confuso y poco esclarecedor para aquel que lo programa/lee/revisa. ¿Cual es la idea de pasar un entero sin signo de 32bits como un float? ¿ Cual es el problema que te lleva a utilizar eso?. En resumen, de poder se puede, solo ver si es necesario realizarlo.
PD: Lo peor que te podes encontrar son con funciones que aceptan un puntero a void,, debido a que no tenes NI IDEA de que espera... Eso deberian aprender los de Texas Instrument con sus APIs/Framework. Al menos si es una estructura sabes el formato viendo el fuente, pero cuando esperan un void* .... Suerte.
Título: Re:Pasar puntero de otro tipo a una funcion
Publicado por: juaperser1 en 10 de Diciembre de 2019, 04:16:10
Es para reutilizar una función que tengo de pintar por pantalla, que acepta punteros a float por que pueden ser variables con decimales o no.
Pero si quiero pintar otro valor, como por ejemplo un int, no quiero utilizar mas memoria creando otra función.
de momento lo he arreglado, creando un float y su puntero, aunque no me gusta por que ocupas la memoria de un float entero para nada.
Citar
Funcion( (float *)&Variable1);
No, eso lo probé pero no funciona, el compilador no me da warning ni nada, pero si por ejemplo en la variable hay un 12, a la función le llega un 1.90exp yo que se cuanto.
Título: Re:Pasar puntero de otro tipo a una funcion
Publicado por: KILLERJC en 10 de Diciembre de 2019, 06:38:55
Ahora que explicas el problema es obvio que lo que te pase no va a funcionar, pero para hacer lo que prentendes es de la forma que lo hiciste al comienzo. Facil en C++ (con el function overloading), pero en C es un poco mas engorroso.
El problema de C es que vas a tener que crear otra funcion con otro nombre o usar una variable extra (como lo pensaste vos).
Creando otra funcion:
Código: C
void Funcionuint32(uint32_t*a){
float f =(float)*a;
Funcion(&f);
//*a = (uint32_t)f; //Esto en caso que necesites modificar el valor del entero.
}
Sin crear otra funcion:
Código: C
float f =(float)Variable1;
Funcion(&f);
//Variable1 = (uint32_t)f; //Esto en caso que necesites modificar el valor del entero.
Mas sencillo que eso no existe, ademas f es una variable local, por lo cual al salir de la funcion se eliminaria.
Título: Re:Pasar puntero de otro tipo a una funcion
Publicado por: juaperser1 en 12 de Diciembre de 2019, 04:14:10
Eso pensaba, bueno pues entonces seguiré con la variable extra.