Inicializar una estructura en C
- Utilizar la notación de estilo de lista inicializadora para inicializar una estructura en C
- Utilizar la notación de lista de asignaciones para inicializar una Struct en C
- Usar la Asignación Individual para Inicializar una Struct en C
Este artículo presenta varios métodos para inicializar una estructura en C.
Utilizar la notación de estilo de lista inicializadora para inicializar una estructura en C
struct
es probablemente la palabra clave más importante para construir estructuras de datos complejas en C. Es un objeto incorporado que puede almacenar múltiples elementos heterogéneos llamados members
.
Observa que las estructuras se definen sólo con la palabra clave struct
, pero en los siguientes ejemplos, añadimos typedef
para crear un nuevo nombre de tipo y hacer más legibles las declaraciones posteriores.
Una vez definida la estructura, podemos declarar una variable de este tipo e inicializarla con notación de lista. Esta sintaxis es similar a la lista inicializadora utilizada en C++. En este caso, asignamos cada miembro de la struct
con un operador de asignación explícito, pero sólo podemos especificar los valores en el orden correcto, y eso sería suficiente en las versiones modernas del lenguaje.
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Person {
char firstname[40];
char lastname[40];
int age;
bool alive;
} Person;
int main(void) {
Person me = {
.firstname = "John\0", .lastname = "McCarthy\0", .age = 24, .alive = 1};
printf("Name: %s\nLast Name: %s\nAge: %d\nAlive: ", me.firstname, me.lastname,
me.age);
me.alive ? printf("Yes\n") : printf("No\n");
exit(EXIT_SUCCESS);
}
Producción :
Name: John
Last Name: McCarthy
Age: 24
Alive: Yes
Utilizar la notación de lista de asignaciones para inicializar una Struct en C
Alternativamente, puede haber un escenario en el que una struct
declarada no se inicialice inmediatamente y necesite que se le asignen valores más adelante en el programa. En este caso, debemos utilizar la sintaxis de inicialización estilo lista con una notación de fundición adicional como prefijo. La conversión al tipo de struct
es el paso necesario para compilar el programa.
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Person {
char firstname[40];
char lastname[40];
int age;
bool alive;
} Person;
int main(void) {
Person me;
me = (Person){
.firstname = "John\0", .lastname = "McCarthy\0", .age = 24, .alive = 1};
printf("Name: %s\nLast Name: %s\nAge: %d\nAlive: ", me.firstname, me.lastname,
me.age);
me.alive ? printf("Yes\n") : printf("No\n");
exit(EXIT_SUCCESS);
}
Producción :
Name: John
Last Name: McCarthy
Age: 24
Alive: Yes
Usar la Asignación Individual para Inicializar una Struct en C
Otro método para inicializar los miembros de la struct
es declarar una variable y luego asignar a cada miembro su correspondiente valor por separado. Ten en cuenta que los Arrays char
no pueden ser asignadas con string, por lo que deben ser copiadas explícitamente con funciones adicionales como memcpy
o memmove
(ver manual). Siempre debes tener en cuenta que la longitud del array no debe ser menor que la cadena que se almacena.
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Person {
char firstname[40];
char lastname[40];
int age;
bool alive;
} Person;
int main(void) {
Person me2;
memcpy(&me2.firstname, "Jane\0", 40);
memcpy(&me2.lastname, "Delaney\0", 40);
me2.age = 27;
me2.alive = true;
printf("Name: %s\nLast Name: %s\nAge: %d\nAlive: ", me2.firstname,
me2.lastname, me2.age);
me2.alive ? printf("Yes\n") : printf("No\n");
exit(EXIT_SUCCESS);
}
Producción :
Name: Jane
Last Name: Delaney
Age: 27
Alive: Yes
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook