C Tipos Intermediário
Structs
Em C, uma struct agrupa variáveis de tipos diferentes em um único tipo composto. Cada campo tem nome e pode ser acessado com o operador ponto (.). É a base para representar entidades do mundo real, como um ponto, uma data ou um aluno.
O typedef cria um apelido para o tipo, evitando escrever struct Nome repetidamente. Já o operador seta (->) é usado quando temos um ponteiro para struct: ele desreferencia e acessa o campo numa única expressão.
Por fim, o compilador pode inserir padding (preenchimento) entre campos para alinhar os dados na memória. Isso faz com que sizeof(struct) possa ser maior que a soma dos tamanhos dos campos. Entender isso evita surpresas ao serializar ou calcular offsets.
Pontos-chave
structdefine um tipo composto com campos nomeados.typedefcria um alias, simplificando a declaração de variáveis.- Use
->para acessar campos através de um ponteiro para struct. - O padding alinha campos na memória e pode aumentar
sizeof. - A ordem dos campos influencia o tamanho total da struct.
#include <stdio.h>
#include <string.h>
typedef struct {
int id;
char nome[20];
float nota;
} Aluno;
void imprime(const Aluno *a) {
printf("ID: %d | Nome: %s | Nota: %.1f\n", a->id, a->nome, a->nota);
}
int main(void) {
Aluno a1 = {1, "Ana", 9.5};
Aluno a2;
a2.id = 2;
strcpy(a2.nome, "Bruno");
a2.nota = 7.0;
imprime(&a1);
imprime(&a2);
printf("sizeof(Aluno) = %zu bytes\n", sizeof(Aluno));
return 0;
}