es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obteniendo el tipo de un puntero en C

Quiero implementar una función que acepte como entrada un entero (int) o un puntero a un caracter (char) y los guarde como un puntero a void. Pero también quiero almacenar el tipo de puntero que se ha pasado ¿Existe alguna forma de encontrar el tipo del puntero?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible encontrar el tipo del puntero que se ha pasado como argumento a una función. Una forma de hacer esto es utilizando el operador typeid, que es parte del lenguaje C++. Sin embargo, dado que has mencionado que estás trabajando con C, no hay un equivalente directo a este operador en C.

    Una solución posible podría ser pasar un argumento adicional a la función que especifique el tipo del puntero que se está pasando. Por ejemplo, podrías definir una enumeración con dos valores, INT_PTR y CHAR_PTR, y pasar esta enumeración como un argumento junto con el puntero void.

    Aquí tienes un ejemplo de implementación:

    typedef enum { INT_PTR, CHAR_PTR } PointerType;
    
    void myFunc(void* ptr, PointerType type) {
       // Utiliza type para determinar el tipo de ptr
       switch(type) {
           case INT_PTR:
               // realiza un casting de ptr a un puntero de tipo int
               int* intPtr = (int*) ptr;
               // haz algo con intPtr
               break;
           case CHAR_PTR:
               // realiza un casting de ptr a un puntero de tipo char
               char* charPtr = (char*) ptr;
               // haz algo con charPtr
               break;
           default:
               // maneja un tipo inválido
               break;
       }
    }
    

    En esta implementación, la función myFunc toma un puntero void ptr y un PointerType que indica el tipo real de ptr. La enumeración PointerType te permite diferenciar entre los dos tipos de punteros que pueden ser pasados. Luego puedes utilizar una sentencia switch para realizar el casting apropiado y el procesamiento del puntero void según el valor de PointerType pasado.

    Con este enfoque, puedes determinar el tipo de puntero que se ha pasado a tu función y realizar operaciones de forma segura en él.

Comments are closed.