Edição didática em português. O código e suas saídas preservam o original.
Estruturas, typedef e o operador -> em C
Agrupe dados relacionados e diferencie o acesso por objetos e ponteiros.

struct define um tipo com vários campos. Use o ponto para acessar um campo de um objeto e -> para acessar por um ponteiro válido. typedef cria um nome alternativo; não aloca memória por si só.
Um array de estruturas armazena registros consecutivos. Inicialize todos os campos que serão lidos e respeite a capacidade dos arrays de caracteres. Passar uma estrutura por valor copia seus campos, mas um campo ponteiro continua apontando para o mesmo objeto.
O compilador pode inserir preenchimento para alinhar os campos. Por isso, sizeof de uma estrutura pode superar a soma dos campos. Não use sua representação bruta como formato de arquivo portável.
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 no compiladorSaída 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
Perguntas frequentes
Por que o código e a saída continuam em inglês?
Palavras-chave, identificadores e textos verificados pelos testes são preservados para não alterar o programa. As explicações e os controles estão traduzidos.