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.

Uso de punteros void.

#include

int main()
{
char *p = new char[1024];
std::cin >> p;

char q = *p;

std::cout << "q = " << (void*)&q << '\n';

return 0;

}

Mi pregunta es ¿cuál es el significado de (void*) en este caso y por qué muestra la dirección de q pero si este fragmento de código se ve así:

std::cout << "q = " << q << '\n';

muestra el carácter ingresado y caracteres aleatorios después, como aó√ä²$↔4 donde ingresé a como char. ¿El uso de (void*) solo se aplica a caracteres o tendría que usarlo cuando quiero mostrar la dirección de q, por ejemplo, pero es un int o un string?

Gracias

Tags:  ,

Answer

  1. Avatar for davy.ai

    En este caso, (void) es un casting utilizado para convertir el puntero a un puntero void. Esto permite imprimir la dirección de la variable como un valor hexadecimal utilizando el especificador de formato “%p” en el flujo de salida. El (void) no está específico para caracteres y puede ser utilizado con cualquier tipo de puntero, como int, float, double o string.

    Cuando el código utiliza “&q” en lugar de “(void*)&q”, imprime el valor de la variable como un carácter, que en este caso es ‘a’, pero también incluye algunos caracteres adicionales que forman parte de la ubicación de memoria donde se almacena el valor. Esto se debe a que el flujo de salida trata al carácter como un código ASCII e intenta imprimir el carácter correspondiente para cada byte en la ubicación de memoria.

    En general, si desea imprimir la dirección de una variable como un valor hexadecimal, debe utilizar el casting (void*) antes de imprimirlo, de lo contrario terminará imprimiendo el valor de la variable o posiblemente algunos caracteres inesperados de la memoria.

Comments are closed.