Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

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

¿Ambos enunciados significan lo mismo que p apunta a la ubicación de la dirección 10? En la compilación, la primera inicialización da alguna advertencia. ¿Cuál es el significado de eso?

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

producción:

 warning: initialization of 'int *' from 'int' makes pointer from integer without a cast [- Wint-conversion]
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Ambos casos convierten el número entero 10 en un tipo de puntero que se utiliza para inicializar un int * . El elenco en el segundo caso hace explícito que este comportamiento es intencional.

Si bien se permite la conversión de un número entero a un puntero, el operador de asignación (y, por extensión, la inicialización) no permite específicamente esta conversión, por lo que se requiere una conversión para que sea conforme. Sin embargo, muchos compiladores aún permitirán esto y simplemente emitirán una advertencia (como aparentemente lo hace).

Tenga en cuenta, sin embargo, que intentar usar un puntero al que se le asigna un valor numérico específico probablemente provocará un bloqueo, a menos que esté en un sistema integrado que admita la lectura o escritura de direcciones de memoria específicas.

over 4 years ago · Santiago Trujillo Denunciar

0

int *p = 10; es incorrecto (violación de la restricción), y el compilador debe generar un mensaje de diagnóstico. El compilador podría rechazar el programa y no hay comportamiento definido si no lo hace. La regla es que el inicializador de un puntero debe ser un valor de puntero compatible o una constante de puntero nulo.

int *q = (int *)10; significa convertir el entero 10 en un puntero. El resultado está definido por la implementación y podría ser una representación de trampa, lo que significa que la inicialización provoca un comportamiento indefinido si la ejecución llega a esta línea.

over 4 years ago · Santiago Trujillo Denunciar

0

int y apuntador a un entero int* son tipos diferentes. El 10 en la primera línea es un int que está tratando de asignar a un puntero de tipo int. De ahí la advertencia. (en X86 ambos comparten el mismo tamaño, pero considere que en este punto es mayormente una coincidencia).

Al convertir el int en un puntero, como lo hace en la segunda línea, le está diciendo al compilador: "Oye, sé que estos son tipos diferentes, pero sé lo que estoy haciendo, así que adelante, trata el valor 10 como un puntero porque realmente quiero apuntar a la memoria con una dirección de 10". (en casi todos los casos, usted no podrá utilizar la dirección de memoria 10)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda