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

110
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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