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

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

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 Report

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 Report

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