Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

338
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda