Categoria

Linguagem C

Busca binária
Linguagem C

Busca binária

A busca binária é um algoritmo clássico de pesquisa em vetores que reduz drasticamente o tempo de busca ao explorar a propriedade de ordenação dos dados. Enquanto a busca linear percorre elemento por elemento — com complexidade O(n) —, a busca binária opera em O(log n), o que significa que para um vetor de 1 milhão de elementos, a busca linear pode exigir até 1 milhão de comparações, enquanto a binária realiza no máximo 20.

05/05/2026
C99, C11 e C17: o que mudou em cada versão
Linguagem C 05/05/2026

C99, C11 e C17: o que mudou em cada versão

O padrão original da linguagem C, conhecido como C89 ou ANSI C, foi publicado em 1989 e consolidado como ISO/IEC 9899:1990. Durante a década de 1990, a linguagem precisava evoluir para acompanhar hardware mais rápido, compiladores mais inteligentes e a crescente demanda por código numérico e científico. O C99 (ISO/IEC 9899:1999) surgiu como uma reforma significativa, introduzindo recursos modernos que facilitavam a escrita de código mais limpo e eficiente.

Aritmética de ponteiros
Linguagem C 05/05/2026

Aritmética de ponteiros

A aritmética de ponteiros é um dos recursos mais poderosos e ao mesmo tempo mais perigosos da linguagem C. Diferentemente da aritmética comum, que opera sobre valores numéricos, a aritmética de ponteiros opera sobre endereços de memória, levando em consideração o tipo de dado apontado.

Arquivos: fopen, fread, fwrite, fclose
Linguagem C 05/05/2026

Arquivos: fopen, fread, fwrite, fclose

Na linguagem C, arquivos são tratados como fluxos de bytes (streams), independentemente do tipo de dado armazenado. A biblioteca padrão stdio.h fornece um conjunto de funções que permitem abrir, ler, escrever e fechar arquivos de forma eficiente. Antes de explorar as funções específicas, é fundamental entender os dois modos de acesso principais:

Arrays: declaração, acesso e limites
Linguagem C 05/05/2026

Arrays: declaração, acesso e limites

Em Linguagem C, um array é uma estrutura de dados homogênea que armazena uma coleção de elementos do mesmo tipo em posições contíguas de memória. Diferentemente de declarar múltiplas variáveis individuais (como nota1, nota2, nota3...), um array permite gerenciar dezenas, centenas ou milhares de valores com uma única variável e um índice.

AddressSanitizer e UndefinedBehaviorSanitizer
Linguagem C 05/05/2026

AddressSanitizer e UndefinedBehaviorSanitizer

Programar em C exige cuidado redobrado com gerenciamento de memória e comportamento indefinido. Erros como buffer overflow, uso de memória liberada e overflow de inteiros podem passar despercebidos durante testes convencionais, mas causam falhas catastróficas em produção. É aqui que entram os sanitizers: ferramentas de instrumentação em tempo de compilação que detectam esses problemas dinamicamente.

Algoritmos de ordenação: bubble, insertion, selection
Linguagem C 05/05/2026

Algoritmos de ordenação: bubble, insertion, selection

Algoritmos de ordenação são procedimentos sistemáticos para rearranjar elementos de uma sequência em uma ordem específica (crescente, decrescente, etc.). São fundamentais na ciência da computação porque dados ordenados permitem buscas mais eficientes (como busca binária), facilitam a detecção de duplicatas e melhoram a performance de muitos outros algoritmos.

Algoritmos de ordenação: merge sort e quick sort
Linguagem C 05/05/2026

Algoritmos de ordenação: merge sort e quick sort

Os algoritmos de ordenação baseados no paradigma divisão e conquista revolucionaram a computação ao reduzir a complexidade de tempo de O(n²) para O(n log n). A ideia central é simples: dividir o problema em subproblemas menores, resolver cada um recursivamente e combinar as soluções. Tanto o merge sort quanto o quick sort seguem esse princípio, mas com abordagens distintas na fase de combinação.

Anatomia de um executável: ELF e segmentos de memória
Linguagem C 05/05/2026

Anatomia de um executável: ELF e segmentos de memória

O formato ELF (Executable and Linkable Format) é o padrão para executáveis, bibliotecas compartilhadas e arquivos objeto no Linux e na maioria dos sistemas Unix modernos. Quando você compila um programa em C com gcc, o compilador gera código objeto (.o), o linker combina esses objetos e produz um arquivo ELF executável. O ELF substituiu formatos mais antigos como a.out e COFF, oferecendo maior flexibilidade e suporte a arquiteturas diversas.