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

608
Visualizações
¿Cómo funciona struct Node *ptr = malloc(sizeof(*ptr))?

Soy un principiante de C y encontré este código al intentar implementar una lista vinculada.

 struct Node *ptr = malloc(sizeof(*ptr));

La estructura del nodo se ve así:

 struct Node { int data; struct Node *next; };

Estoy tratando de entender la primera línea. Parece que malloc(sizeof(*ptr)) ya conoce el contenido de ptr . ¿Qué sucede exactamente en el lado izquierdo y sucede antes de que se llame a malloc?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Solo use paréntesis con sizeof si hay un tipo del que le gustaría saber el tamaño. Si tiene una expresión , como *ptr , basta con escribir:

 struct Node *ptr = malloc(sizeof *ptr); // <- no parenthesis

La expresión *ptr elimina la referencia del puntero para que se convierta en un struct Node y para eso sizeof devuelve el tamaño.

sizeof expression : devuelve el tamaño, en bytes, de la representación de objeto del tipo de expresión. No se aplican conversiones implícitas a la expresión.

Es del mismo tamaño que obtienes si lo haces:

 struct Node *ptr = malloc(sizeof(struct Node)); // <- parenthesis needed

pero la primera alternativa es a menudo preferible por claridad.

over 4 years ago · Santiago Trujillo Relatório

0

Parece que malloc(sizeof(*ptr)) ya conoce el contenido de ptr .

En realidad, no lo hace. El operador sizeof en realidad no evalúa su operando (a menos que sea una matriz de longitud variable), solo mira su tipo. Esto significa que ptr en realidad no está desreferenciado y, por lo tanto, es una operación segura.

over 4 years ago · Santiago Trujillo Relatório

0

Debe asignar una memoria para un objeto del tipo struct Node declarado como

 struct Node { int data; struct Node *next; };

Entonces, en la llamada de malloc, debe especificar el tamaño de la memoria que se asignará para un objeto de este tipo. La función malloc devuelve un puntero a la memoria asignada.

para que puedas escribir

 struct Node *ptr = malloc( sizeof( struct Node ) );

Por otro lado, la expresión *ptr tiene el tipo struct Node. Es decir, el puntero declarado ptr tiene el tipo de puntero struct Node * y la desreferenciación de un puntero como *ptr produce una expresión del tipo struct Node .

Entonces puede reescribir el registro anterior también como

 struct Node *ptr = malloc(sizeof(*ptr));

porque en este caso sizeof( struct Node ) es equivalente a sizeof( *ptr ) .

Es decir, el compilador necesita saber el tipo del operando del operador sizeof eso para determinar el tamaño de un objeto de ese tipo.

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