Edição didática em português. O código e suas saídas preservam o original.
Perguntas de entrevista sobre C
Revise ponteiros, memória, arrays, funções e comportamento indefinido com raciocínio prático.

Explique primeiro a diferença entre um valor e seu endereço. C passa argumentos por valor; uma função pode modificar um objeto do chamador quando recebe uma cópia de um ponteiro válido para ele. Um array não é um ponteiro, embora muitas expressões de array sejam convertidas em ponteiros para o primeiro elemento.
Diferencie duração automática, estática e armazenamento alocado dinamicamente. Nunca retorne o endereço de uma variável local automática. Verifique malloc e libere cada alocação uma única vez. Um ponteiro que conserva um endereço após free não permite continuar acessando o objeto.
Pratique sizeof, const, static e strings terminadas em zero. sizeof de um array completo mede todo o array; dentro de uma função, um parâmetro escrito como array é ajustado para ponteiro. Reserve espaço para o terminador das strings.
Em problemas de algoritmos, descreva precondições, casos de borda e complexidade antes de programar. Se um trecho tem comportamento indefinido, não invente uma saída determinística: explique a operação inválida e como corrigi-la.
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.