Edizione didattica italiana
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 compilatoreRisultato 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.