Estructura (struct) en C [Guía completa]

Estructura (struct) en C [Guía completa]

Una estructura se define como una colección de tipos de datos iguales/diferentes. Todos los elementos de datos se agrupan lógicamente relacionados y se puede acceder a ellos mediante variables.

Tabla de contenidos:

  1. Conceptos básicos de estructura en C
  2. Declaración de estructura
    2.1. Estructura etiquetada
    2.2. Variables de estructura
    2.3. Estructuras definidas por tipos
  3. Inicialización de Estructura en C
  4. Acceso a estructuras en C
  5. Arreglo de Estructura en C
  6. Estructuras anidadas en C

Comencemos con la Estructura (struct) en C.

Conceptos básicos de estructura en C

"Estructura La palabra clave " se utiliza para identificar la estructura.

Ejemplo:

struct studentDetails {

char name[10];
char gender[2]; // F for female or M for male
int number;
char parentsName[20];
char address[20];

};

Asignación de memoria

  • Siempre, las ubicaciones de memoria contiguas (adyacentes) se utilizan para almacenar miembros de la estructura en la memoria. Considere el ejemplo anterior para comprender cómo se asigna la memoria para las estructuras.

  • Hay 5 miembros declarados para la estructura en el programa anterior. En el compilador de 32 bits, el tipo de datos int ocupa 4 bytes de memoria. 1 byte de cada memoria está ocupado por el tipo de datos char.

  • La memoria se reserva solo si la definición anterior está asociada con variables. Es decir, una vez que se define la estructura, deben declararse. Entonces solo se reservan 56 bytes de espacio de memoria.

Declaración de estructura

La estructura se puede declarar de tres maneras diferentes:

1:Estructura etiquetada
2:Variables de estructura
3:Tipo de estructuras definidas

1:Estructura etiquetada

El nombre de la estructura con el nombre de la etiqueta se llama estructura etiquetada. El nombre de la etiqueta es el nombre de la estructura.

struct studentDetails {

char name[10];
char gender[2]; // F for female and M for male
int number;
char parentsName[20];
char address[20];

};
  • Aquí, StudentDetails es el nombre de la etiqueta.
  • Para asignar la memoria para la estructura, tenemos que declarar la variable como se muestra a continuación

struct estudianteDetalles Jack,Jonas;

Una vez que se declaran las variables de estructura, el compilador asigna memoria para la estructura, por lo que se reservan 32 bytes para la variable Jonas y otros 32 bytes para la variable Jack. El tamaño de la memoria asignada es la suma del tamaño de los miembros individuales

2:Variables de estructura

Es posible declarar variables de una estructura, ya sea junto con la definición de la estructura o después de que se haya definido la estructura.

La declaración de variables de estructura es similar a la declaración de cualquier variable normal de cualquier otro tipo de datos.

struct Student {
    	char name[25];
    	int age;
    	char branch[10];
    	//F for female and M for male
    	char gender;
	} S1,S2 ; 

Observe que se asignan 40 bytes de memoria para la variable S1 y otros 22 bytes de memoria para la variable S2.

Nota: Evitamos esta forma de definir y declarar la estructura variablesm por las siguientes razones:

  • Sin una etiqueta, no es posible declarar variables en etapas posteriores dentro de las funciones.
  • No es posible usarlos como parámetro en la función, porque todos los parámetros deben declararse.
  • Podemos definirlos solo al comienzo del programa. En tales situaciones, se tratan como variables globales. En la programación estructurada es mejor evitar el uso de variables globales.

3:Estructura definida por tipos

La definición de estructura asociada con la palabra clave typedef se llama estructura definida por tipo. Esta es la forma más poderosa de definir la estructura

typedef struct Person 
{ 
	int age; 
	char name[25]; 
}p1,p2,p3;

Inicialización de Estructura en C

Se puede inicializar de varias formas

Método 1 :especifique los inicializadores entre llaves y separados por comas cuando las variables se declaran como se muestra a continuación:

struct Student {
    char name[25];
    int age;
    char branch[10];
    //F for female and M for male
    char gender;
}S1 = {"John",14,"CSE","M"};

Método 2 :especifique los inicializadores entre llaves y separados por comas cuando las variables se declaran como se muestra a continuación:

struct Student
{
    char name[25];
    int age;
    char branch[10];
    //F for female and M for male
    char gender;
};

struct S1 = {"John",14,"CSE","M"};

Acceso a estructuras en C

Podemos acceder a la estructura de dos formas:

  1. Por . (operador miembro u punto)
  2. Por -> (operador de puntero de estructura)
#include<stdio.h>

struct Student
{
    char name[25];
    int age;
    char branch[10];
    //F for female and M for male
    char gender;
};

int main()
{
    struct Student s1;
    
 // s1 is a variable of Student type and 
// age,name,branch,gender is a member of StudeNT and assigning values to them  using // dot(.)operator
        
    s1.age = 18;
    s1.name = "John";
    s1.branch = "C.S.E";
    s1.gender = "F";
    
    /*
        displaying the stored values
    */
    printf("Name of Student 1: %s\n", s1.name);
    printf("Age of Student 1: %d\n", s1.age);
    printf("Branch of Student 1: %s\n", s1.branch);
    printf("Gender of Student 1: %s\n", s1.gender);
    
    return 0;
}

Salida:

Name of student 1: John
Age of Student 1: 18
Branch of Student 1: C.S.E
Gender of Student 1:F

Array de Estructura en C

La matriz de estructuras en C se utiliza para almacenar información sobre varios miembros de diferentes tipos de datos. También se conoce como colección de estructuras.

#include <stdio.h>

struct Employee
{
    char name[10];
    int sal;
};

int main() {

struct Employee emp[2];

for(int i = 0; i<2 ;i++){

printf("%d employee name",i+1);
scanf("%s",emp[i].name);
printf("salary of %d employee",i+1);
scanf("%d",&emp[i].sal);

}

return 0;

}

Salida:

1 employee name John
salary of 1 employee 120000
2 employee name Jonas
salary of 2 employee 130000

Estructuras anidadas en C

Estructura anidada significa estructura dentro de estructura. Como hemos declarado miembros dentro de la estructura en la misma podemos declarar declarar estructura.

#include <stdio.h>

struct Student
{
    // here additionalInfo is a structure
    struct additionaInfo
    {
        char address[20];
        char parentsname[30];
        int mobileno;
        
    }info;
    
    char collegeId[10];
    char name[10];
    int age;
    
} stu;

int main()
{
printf("Give Student college id:");
scanf("%s",stu.collegeId);
printf("Give Student Name:");
scanf("%s",stu.name);
printf("Give Student age:");
scanf("%d",stu.age);
printf("Give Student address:");
scanf("%s",stu.info.address);
printf("Give Student parentsName:");
scanf("%s",stu.info.parentsname);
printf("Give Student mobileno:");
scanf("%d",stu.info.mobileno);

return 0;

}

Salida:

Give Student college id:12345
Give Student Name: John
Give Student age:20
Give Student address: Bangalore
Give Student parentsName: Jonas
Give Student mobileno : 12456

Con este artículo en OpenGenus, debe tener una idea completa de la estructura (Struct) en el lenguaje de programación C/C++.