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

111
Visualizações
¿Qué sucede cuando declaro una matriz en una estructura en lenguaje C?

Me cuesta entender qué sucede cuando declaro una matriz en una estructura. Hablando de matrices normales (int, float, char... type), sé que el nombre de la matriz es en sí mismo un puntero al primer elemento de la matriz. Sin embargo, digamos que tengo una estructura como esta:

 struct student { char name[12]; int age; }

y en la función main digamos que declaro: struct student s1; Bueno, no entiendo cómo se asigna esta variable en la memoria. ¿Hay 4 bytes para la edad y 10 bytes para la cadena, pero qué pasa con el puntero llamado s1.name (que es un puntero al primer elemento de la cadena, verdad?), ¿Se asigna también en el nuevo estructura o no?

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

0

Las matrices no son punteros, y tampoco lo son sus "nombres", sea lo que sea que eso signifique.

Se convierten implícitamente en punteros en la mayoría de los escenarios, pero el puntero resultante se calcula sobre la marcha y, por lo general, no existe en la memoria antes de la conversión.

Una matriz (de cualquier tipo de elemento) se almacena en la memoria como N elementos consecutivos y nada más.

Entonces, char name[12] ocupa 12 bytes (que almacenan 12 caracteres). int age ocupa 4 bytes en la mayoría de las plataformas modernas.

Por lo tanto struct Student ocupa 16 bytes. Una matriz de struct Student de tamaño N ocupa sizeof(struct Student) * N bytes.

over 4 years ago · Santiago Trujillo Relatório

0

Sé que el nombre de la matriz es en sí mismo un puntero.

Esta es una afirmación incorrecta. Las matrices son matrices, no punteros. Pero si se usa en expresiones con raras excepciones, un designador de matriz se convierte implícitamente en un puntero a su primer elemento.

Declaró el especificador de tipo struct estudiante.

 struct student { char name[12]; int age; };

Para determinar el tamaño de un objeto de este tipo puedes escribir

 printf( "sizeof( struct student ) = %zu\n", sizeof( struct student ) );

Aquí hay un programa de demostración.

 #include <stdio.h> int main( void ) { struct student { char name[12]; int age; }; printf( "sizeof( struct student ) = %zu\n", sizeof( struct student ) ); struct student s; printf( "sizeof( s ) = %zu\n", sizeof( s ) ); printf( "sizeof( s.name ) = %zu\n", sizeof( s.name ) ); printf( "sizeof( s.age ) = %zu\n", sizeof( s.age ) ); }

La salida del programa podría verse como

 sizeof( struct student ) = 16 sizeof( s ) = 16 sizeof( s.name ) = 12 sizeof( s.age ) = 4

Que sea un objeto del tipo estructura ocupa 16 bytes. Los primeros 12 bytes están ocupados por su name de miembro de datos (matriz) y los últimos 4 bytes están ocupados por la age del miembro de datos.

over 4 years ago · Santiago Trujillo Relatório

0

para responder a su pregunta específica. No hay un 'puntero llamado s.name', hay una variable llamada s.name. Esta variable se refiere a una matriz de 12 caracteres asignada en el desplazamiento 0 de la estructura. En algunas circunstancias, el compilador tratará una matriz como si fuera un puntero al primer elemento, en otros casos no. Asi que

 sizeof(s.name) = 12

tratando s.name como lo que realmente es, una matriz de caracteres. Mientras que un puntero real, digamos char *p, produciría

 sizeof(p) = 4 or 8 depending on 32 or 64 bit

Puede ver que s.name se trata como un puntero en otros lugares porque ambos funcionan:

 strlen(s.name); strlen(p);

strlen se declara tomando char*

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