MEJOR SITIO PARA DESARROLLADORES WEB
C Idioma. W3Schools en español. Lecciones para principiantes

Ua En De

C Estructuras (structs)


Estructuras

Las estructuras (también llamadas structs) son una forma de agrupar varias variables relacionadas en un solo lugar. Cada variable de la estructura se conoce como miembro de la estructura.

A diferencia de una matriz, una estructura puede contener muchos tipos de datos diferentes (int, float, char, etc.).


Crear una estructura

Puedes crear una estructura usando la palabra clave struct y declarar cada uno de sus miembros entre llaves:

struct MyStructure {   // Declaración de estructura
  int myNum;           // Miembro (variable int)
  char myLetter;       // Miembro (variable de char)
}; // Termina la estructura con un punto y coma

Para acceder a la estructura, debes crear una variable de la misma.

Utilice la palabra clave struct dentro del método main(), seguida del nombre de la estructura y luego el nombre. De la variable de estructura:

Crea una variable de estructura con el nombre "s1":

struct myStructure {
  int myNum;
  char myLetter;
};

int main() {
  struct myStructure s1;
  return 0;
}

Miembros de la estructura de acceso

Para acceder a los miembros de una estructura, use la sintaxis de puntos (.):

Ejemplo

// Crea una estructura llamada myStructure
struct myStructure {
  int myNum;
  char myLetter;
};

int main() {
  // Cree una variable de estructura de myStructure llamada s1
  struct myStructure s1;

  // Asignar valores a los miembros de s1.
  s1.myNum = 13;
  s1.myLetter = 'B';

  // Imprimir valores
  printf("My number: %d\n", s1.myNum);
  printf("My letter: %c\n", s1.myLetter);

  return 0;
}
Inténtalo tú mismo »

Ahora puedes crear fácilmente múltiples variables de estructura con diferentes valores, usando solo una estructura:

Ejemplo

// Crear diferentes variables de estructura
struct myStructure s1;
struct myStructure s2;

// Asignar valores a diferentes variables de estructura
s1.myNum = 13;
s1.myLetter = 'B';

s2.myNum = 20;
s2.myLetter = 'C';
Inténtalo tú mismo »

¿Qué pasa con las cuerdas en las estructuras?

Recuerde que las cadenas en C son en realidad una matriz de caracteres y, desafortunadamente, no puede asignar un valor a una matriz como esta:

Ejemplo

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];  // String
};

int main() {
  struct myStructure s1;

  // Intentando asignar un valor a la cadena
  s1.myString = "Some text";

  // Intentando imprimir el valor
  printf("My string: %s", s1.myString);

  return 0;
}

Ocurrirá un error:

prog.c:12:15: error: assignment to expression with array type
Inténtalo tú mismo »

Sin embargo, ¡hay una solución para esto! Puede utilizar la función strcpy() y asignar el valor a s1.myString, así:

Ejemplo

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30]; // String
};

int main() {
  struct myStructure s1;

  // Asigne un valor a la cadena usando la función strcpy
  strcpy(s1.myString, "Some text");

  // Imprimir el valor
  printf("My string: %s", s1.myString);

  return 0;
}

Resultado:

My string: Some text
Inténtalo tú mismo »

Sintaxis más sencilla

También puede asignar valores a los miembros de una variable de estructura en el momento de la declaración, en una sola línea.

Simplemente, inserte los valores en una lista separada por comas entre llaves {}. Tenga en cuenta que no es necesario utilizar la función strcpy() para valores de cadena con esta técnica:

Ejemplo

// Crear una estructura
struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
  // Crear una variable de estructura y asignarle valores
  struct myStructure s1 = {13, 'B', "Some text"};

  // Imprimir valores
  printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

  return 0;
}
Inténtalo tú mismo »

Nota: El orden de los valores insertados debe coincidir con el orden de los tipos de variables declarados en la estructura (13 para int, 'B' para char, etc.).


Copiar estructuras

También puedes asignar una estructura a otra.

En el siguiente ejemplo, los valores de s1 se copian a s2:

Ejemplo

struct myStructure s1 = {13, 'B', "Some text"};
struct myStructure s2;

s2 = s1;
Inténtalo tú mismo »

Modificar valores

Si desea cambiar/modificar un valor, puede utilizar la sintaxis de puntos (.).

Y para modificar un valor de cadena, la función strcpy() vuelve a ser útil:

Ejemplo

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
 // Crear una variable de estructura y asignarle valores
  struct myStructure s1 = {13, 'B', "Some text"};

  // Modificar valores
  s1.myNum = 30;
  s1.myLetter = 'C';
  strcpy(s1.myString, "Something else");

  // Imprimir valores
  printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

  return 0;
}
Inténtalo tú mismo »

La modificación de valores es especialmente útil cuando se copian valores de estructura:

Ejemplo

// Crear una variable de estructura y asignarle valores
struct myStructure s1 = {13, 'B', "Some text"};

// Crear otra variable de estructura
struct myStructure s2;

// Copie los valores de s1 a s2
s2 = s1;

// Cambiar valores de s2
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");

// Imprimir valores
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);
Inténtalo tú mismo »

Bien, entonces, ¿para qué sirven las estructuras?

Imagine que tiene que escribir un programa para almacenar información diferente sobre automóvil, como marca, modelo y año. Lo bueno de las estructuras es que puedes crear una única "plantilla de automóvil" y usarla para cada automóvil que fabriques. Vea a continuación un ejemplo de la vida real.


Ejemplo de la vida real

Usar una estructura para almacenar diferente información sobre Cars:

Ejemplo

struct Car {
  char brand[50];
  char model[50];
  int year;
};

int main() {
  struct Car car1 = {"BMW", "X5", 1999};
  struct Car car2 = {"Ford", "Mustang", 1969};
  struct Car car3 = {"Toyota", "Corolla", 2011};

  printf("%s %s %d\n", car1.brand, car1.model, car1.year);
  printf("%s %s %d\n", car2.brand, car2.model, car2.year);
  printf("%s %s %d\n", car3.brand, car3.model, car3.year);

  return 0;
}
Inténtalo tú mismo »

C Ejercicios

Ponte a prueba con ejercicios

Ejercicio:

Complete la parte que falta para crear una estructura de automóvil:

 Car {
  char brand[50];
  char model[50];
  int year;
};