Online C Compiler
Abrir en el compilador

Edición didáctica en español. El código y sus salidas conservan el original.

Estructuras, typedef y el operador -> en C

Agrupa datos relacionados y diferencia el acceso mediante objetos y punteros.

Abrir en el compilador

Estructuras, typedef y el operador -> en C
Agrupa datos relacionados y diferencia el acceso mediante objetos y punteros.

struct define un tipo con varios campos. Usa el punto para acceder a un campo de un objeto y -> para acceder mediante un puntero válido. typedef crea un nombre alternativo; no asigna memoria por sí solo.

Un array de estructuras almacena registros consecutivos. Inicializa todos los campos que vayas a leer y respeta la capacidad de los arrays de caracteres. Pasar una estructura por valor copia sus campos, pero un campo puntero sigue apuntando al mismo objeto.

El compilador puede insertar relleno para alinear los campos. Por eso sizeof de una estructura puede superar la suma de sus campos. No uses su representación cruda como formato de archivo portable.

Código C

#include <stdio.h>
#include <string.h>

// Typedef struct definition
typedef struct {
    int id;
    char name[32];
    float gpa;
    int credits;
} Student;

// Function taking pointer to struct (arrow operator ->)
void print_student(const Student *s) {
    printf("ID: %-4d | Name: %-15s | GPA: %.2f | Credits: %d\n",
           s->id, s->name, s->gpa, s->credits);
}

// Mutate struct via pointer
void update_gpa(Student *s, float new_gpa) {
    s->gpa = new_gpa;
}

int main(void) {
    // Array of structs
    Student roster[] = {
        {101, "Alice Chen", 3.92f, 48},
        {102, "Bob Smith", 3.65f, 32},
        {103, "Charlie Davis", 3.88f, 60}
    };
    int total = sizeof(roster) / sizeof(roster[0]);

    printf("--- Engineering Class Roster ---\n");
    for (int i = 0; i < total; i++) {
        print_student(&roster[i]);
    }

    printf("\n--- Updating Bob's GPA via Pointer (Arrow ->) ---\n");
    update_gpa(&roster[1], 3.82f);
    print_student(&roster[1]);

    return 0;
}
Abrir en el compilador

Salida esperada

--- Engineering Class Roster ---
ID: 101  | Name: Alice Chen      | GPA: 3.92 | Credits: 48
ID: 102  | Name: Bob Smith       | GPA: 3.65 | Credits: 32
ID: 103  | Name: Charlie Davis   | GPA: 3.88 | Credits: 60

--- Updating Bob's GPA via Pointer (Arrow ->) ---
ID: 102  | Name: Bob Smith       | GPA: 3.82 | Credits: 32

Preguntas frecuentes

¿Por qué el código y la salida siguen en inglés?

Las palabras clave, los identificadores y los textos que verifican las pruebas se conservan para no cambiar el programa. Las explicaciones y los controles están traducidos.