Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

335
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!