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.

¿Cuál es la diferencia entre int *p=10 e int *p = (int *)10?

¿Ambas declaraciones significan que ‘p’ está apuntando a la dirección de memoria 10?
Al compilar, la primera inicialización muestra una advertencia. ¿Cuál es el significado de eso?

#include <stdio.h>
int main()
{
int *p = 10;
int *q = (int *)10;

return 0;

}

advertencia: la inicialización de ‘int *’ desde ‘int’ hace que el puntero se convierta en un entero sin un moldeado [-Wconversion de enteros]

Tags:  ,

Answer

  1. Avatar for davy.ai

    Explicación

    Las dos declaraciones no significan lo mismo.

    En la primera declaración int *p = 10;, p está siendo inicializado con un valor entero de 10, el cual no es una dirección de memoria válida. Por lo tanto, durante la compilación genera una advertencia que dice “initialization of ‘int *’ from ‘int’ makes pointer from integer without a cast [- Wint-conversion]”.

    En la segunda declaración int *q = (int *)10;, el valor entero de 10 está siendo explícitamente convertido a un puntero a un tipo entero. Por lo tanto, q apunta a la ubicación de memoria 10.

    Por lo tanto, es importante entender que asignar un valor entero a una variable de puntero sin convertirlo al tipo de datos apropiado puede resultar en un comportamiento inesperado durante el tiempo de ejecución.

Comments are closed.