Autor Tema: Pasar puntero de otro tipo a una funcion  (Leído 265 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2711
Pasar puntero de otro tipo a una funcion
« en: 09 de Diciembre de 2019, 17:21:50 »
Una pregunta un poco chorra pero que no recuerdo como era y lo busco y no lo veo.

si tengo una función que recibe un puntero float por ejemplo:

void Funcion (float *Valor);

Si le quiero pasar una variable (dirección) de otro tipo como lo hago?, por ejemplo:

uint32_t Variable1;

Funcion (&Variable1); no puedo hacer directamente eso por que no se pasa correctamente. ademas de que variable no es un puntero.

¿debo hacer esto obligatoriamente? tiene que haber una forma mas elegante de hacerlo.

float VariableTemporal = (float)Variable1;
float* PunteroTemportal = &VariableTemporal;
Funcion (PunteroTemporal); o Funcion (&VariableTemporal);

un saludo.
« Última modificación: 09 de Diciembre de 2019, 17:32:40 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7479
Re:Pasar puntero de otro tipo a una funcion
« Respuesta #1 en: 09 de Diciembre de 2019, 20:50:21 »
Código: C
  1. 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.
« Última modificación: 09 de Diciembre de 2019, 20:56:28 por KILLERJC »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2711
Re:Pasar puntero de otro tipo a una funcion
« Respuesta #2 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.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7479
Re:Pasar puntero de otro tipo a una funcion
« Respuesta #3 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
  1. void Funcionuint32(uint32_t *a){
  2.     float f = (float)*a;
  3.     Funcion(&f);
  4.     //*a = (uint32_t)f;  //Esto en caso que necesites modificar el valor del entero.
  5. }

Sin crear otra funcion:
Código: C
  1.     float f = (float)Variable1;
  2.     Funcion(&f);
  3.     //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.
« Última modificación: 10 de Diciembre de 2019, 06:51:38 por KILLERJC »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2711
Re:Pasar puntero de otro tipo a una funcion
« Respuesta #4 en: 12 de Diciembre de 2019, 04:14:10 »
Eso pensaba, bueno pues entonces seguiré con la variable extra.

Gracias.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw


 

anything