Online C Compiler
Apri nel compilatore

Edizione didattica italiana

Strutture e record in C

Raggruppa campi con struct e comprendi copie, puntatori e allineamento.

Apri nel compilatore

Strutture e record in C
Raggruppa campi con struct e comprendi copie, puntatori e allineamento.

struct definisce più campi. Il punto accede a un campo dell’oggetto; -> vi accede tramite un puntatore valido. typedef crea un altro nome di tipo, senza allocare memoria da solo.

Un array di strutture contiene record consecutivi. Inizializza i campi letti e rispetta i buffer di caratteri. Copiare una struttura copia i suoi campi, ma un campo puntatore continua a indicare lo stesso oggetto.

Il compilatore può inserire riempimento per l’allineamento: sizeof può superare la somma dei campi. Non usare la rappresentazione grezza come formato di file portabile.

Codice sorgente

#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;
}
Apri nel compilatore

Risultato atteso

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

Domande frequenti

Perché il codice e alcuni risultati restano in inglese?

Parole chiave C, identificatori, commenti del programma e output attesi restano quelli originali per preservare codice eseguibile e test coerenti. Spiegazioni e istruzioni sono tradotte.