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