Online C Compiler
Abrir no compilador

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.

Abrir no compilador

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 compilador

Saí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.