Menu
Coddy logo textTech

Folha de Consulta C

Última atualização

Hello World e estrutura do programa

Todo programa C começa em main e retorna um int.

ElementoCódigo
Incluir um cabeçalho#include <stdio.h>
Ponto de entradaint main(void) { ... }
Com argumentos de linha de comandoint main(int argc, char *argv[]) { ... }
Exibir uma linhaprintf("Hello, World!\n");
Retornar sucessoreturn 0;
Comentário de uma linha// comment
Comentário de bloco/* comment */

Tipos de dados

Os tamanhos dependem da plataforma; os mínimos abaixo são garantidos pelo padrão.

TipoDescrição
intInteiro, pelo menos 16 bits (geralmente 32)
unsigned intInteiro não negativo
long / long longInteiros mais largos (pelo menos 32 / 64 bits)
float / doublePonto flutuante de precisão simples / dupla
charByte único, também usado para caracteres
_Bool (bool via <stdbool.h>)true ou false
size_tTipo sem sinal para tamanhos e índices
voidSem tipo - usado para funções e ponteiros genéricos

Especificadores de formato printf e scanf

Marcadores que correspondem ao tipo de cada argumento.

EspecificadorCorresponde a
%d / %iint com sinal
%uint sem sinal
%ld / %lldlong / long long
%fdouble (e float em printf)
%.2fdouble com 2 casas decimais
%cUm único char
%sString (char *)
%pEndereço de ponteiro
%xint sem sinal em hexadecimal
%zusize_t

Operadores

OperadorSignificado
+ - * / %Aritméticos (% é o resto inteiro)
== !=Igual / diferente
< > <= >=Comparação
&& || !E / ou / não lógico
& | ^ ~ << >>E, ou, xor, não bit a bit, deslocamentos
++ --Incremento / decremento
+= -= *= /=Atribuição composta
cond ? a : bCondicional ternário
sizeof(x)Tamanho de um tipo ou variável em bytes

Controle de fluxo

InstruçãoSintaxe
If / elseif (x > 0) { ... } else { ... }
Else ifelse if (x == 0) { ... }
Switchswitch (n) { case 1: ...; break; default: ...; }
Laço whilewhile (i < n) { ... }
Laço do-whiledo { ... } while (i < n);
Laço forfor (int i = 0; i < n; i++) { ... }
Break / continuebreak; sai de um laço, continue; pula para a próxima iteração
Goto (raro)goto label; ... label:

Funções

Declare antes de usar, ou adicione um protótipo no topo do arquivo.

OperaçãoSintaxe
Definir uma funçãoint add(int a, int b) { return a + b; }
Protótipo (declaração)int add(int a, int b);
Sem valor de retornovoid greet(void) { ... }
Sem parâmetrosint rand_seed(void) { ... }
Passagem por ponteiro (mutar)void inc(int *p) { (*p)++; }
Passar um arrayint sum(int arr[], int n) { ... }
Estática (local ao arquivo)static int helper(void) { ... }

Ponteiros e memória

Um ponteiro guarda um endereço. A memória do heap precisa ser liberada manualmente.

OperaçãoSintaxe
Declarar um ponteiroint *p;
Endereço dep = &x;
Desreferenciar (ler/escrever)int y = *p; / *p = 10;
Ponteiro nuloint *p = NULL;
Alocar no heapint *a = malloc(n * sizeof(int));
Alocar + zerarint *a = calloc(n, sizeof(int));
Redimensionar uma alocaçãoa = realloc(a, newSize);
Liberar memória do heapfree(a);
Aritmética de ponteiros*(a + i) é o mesmo que a[i]

Arrays e strings

Strings em C são arrays de char terminados por \0.

OperaçãoSintaxe
Declarar um arrayint nums[5];
Inicializar um arrayint nums[] = {1, 2, 3};
Acessar um elementonums[0] = 10;
Tamanho do array (arrays na pilha)sizeof(nums) / sizeof(nums[0])
Literal de stringchar s[] = "hello";
Comprimento da stringstrlen(s) (exclui \0)
Copiar uma stringstrcpy(dst, src);
Comparar stringsstrcmp(a, b) == 0 significa igual
Concatenar stringsstrcat(dst, src);

Structs e stdlib comuns

OperaçãoSintaxe
Definir uma structstruct Point { int x; int y; };
Declarar e acessarstruct Point p; p.x = 1;
Acessar via ponteirop->x = 1; (igual a (*p).x)
Apelido de tipotypedef struct Point Point;
Ler entradascanf("%d", &n);
Converter string para intint n = atoi("42");
Valor absoluto / potênciaabs(x) (int), pow(x, y) de <math.h>
Ordenar um arrayqsort(arr, n, sizeof(int), cmp);

A sintaxe, os especificadores de formato e os padrões de ponteiros de C que você mais usa, em uma única página. Esta folha de consulta C é uma referência rápida para escrever C - os tipos de dados, os especificadores de printf/scanf, os operadores, o controle de fluxo e as operações de ponteiro e memória que costumam confundir as pessoas.

Tudo aqui é C padrão (C99/C11) e compila com gcc ou clang. Copie o que precisar ou teste qualquer trecho ao vivo no playground de C - sem compilador para instalar.

Perguntas frequentes sobre a folha de consulta C

Esta folha de consulta C é gratuita?
Sim. Esta folha de consulta C é totalmente gratuita, sem necessidade de cadastro. Salve nos favoritos e volte sempre que precisar consultar um tipo, um especificador de formato ou uma operação de ponteiro.
Qual é a diferença entre a pilha e o heap em C?
A memória da pilha guarda variáveis locais e é liberada automaticamente quando uma função retorna - rápida, mas limitada em tamanho. A memória do heap é alocada explicitamente com malloc ou calloc, vive até você chamar free, e é usada quando você precisa de memória que sobreviva à função atual ou cujo tamanho só é conhecido em tempo de execução. Esquecer de chamar free na memória do heap causa um vazamento de memória.
Por que o scanf precisa de um e comercial (&) mas o printf não?
O scanf escreve o valor de volta na sua variável, então precisa do endereço da variável - é isso que &x fornece. O printf apenas lê o valor, então você passa o próprio valor. A exceção são as strings: um array de char já decai para um ponteiro, então você passa scanf("%s", name) sem o &.
Posso praticar C online?
Sim. Abra o playground de C para compilar e executar qualquer trecho desta folha de consulta no seu navegador - sem compilador para instalar. Quando quiser estrutura, o curso interativo e gratuito de C da Coddy leva você passo a passo de variáveis e laços a ponteiros e gerenciamento de memória.
Esta folha de consulta é boa para iniciantes?
Sim. Ela está organizada dos blocos de construção mais comuns (tipos, printf, controle de fluxo) até os avançados (ponteiros, memória, structs), de modo que você pode usar as seções de cima já no primeiro dia e ir avançando para o resto.
Coddy programming languages illustration

Aprenda C com a Coddy

COMEÇAR