¿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]
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.