Diagrama de memória como grade
Normalmente o que eu faço é representar a memória como uma "grade", para que eu possa criar endereços, destacar diferentes espaços de memória e escrever nos valores das células (ou ainda mais, suas representações binárias) e vincular os ponteiros na memória os valores que eles apontam. (E ainda menciona que é uma simplificação).
Geralmente é um momento "ohhh" para a maioria dos meus alunos.
Malabarismo de símbolos
Então, quando se trata de fazê-los parar de esquecer como usar & e *, é muito simples: apresentá-lo da mesma maneira que fazem cálculos matemáticos ou físicos. Se você dividir uma distância em km por hora, você terá uma velocidade em km / h. O que precisa estar fora. Simples.
printf para o Rescue
Fazer apenas alguns exemplos básicos que representam visualmente o que você explicou com eles irá confortá-los naquilo que eles acham que entenderam, ou dar a eles a oportunidade de dizer "ah, eu não entendo esse".
Seja extenso
Encaminhe os ponteiros para tipos simples e verifique se eles entendem a diferença entre o endereçamento e o tamanho de um tipo de dados, em seguida, estruturas, arrays e vários níveis.
Em seguida, inicie a aritmética do ponteiro.
Adendo: Recursão
Eu geralmente explico a recursão de maneira semelhante, usando uma representação visual. Peça-lhes que imprimam o alfabeto usando uma função pré-fabricada que escreve um único caractere e, em seguida, peça-lhes para imprimi-lo na ordem inversa, alterando apenas duas linhas.
Normalmente há um "o que o ...?" momento, e quando você adiciona apenas outro parâmetro ao seu printf para imprimir valores numéricos e recuar os passos, torna-se um suspiro de alívio.
Alternativas: o modelo Play-Doh e os copos de água
Na verdade, eu tinha alguns colegas de trabalho em uma universidade que mostravam aos alunos um vídeo explicando ponteiros e acessos à memória usando a pasta play-doh. Foi incrivelmente inteligente e bem feito, embora eu nunca tenha realmente usado essa técnica, a não ser para alunos muito jovens interessados em entender programação (mas geralmente eu não os levaria a um idioma usando ponteiros muito cedo). Basicamente, usando minúsculas bolas de jogo-doh que você pode anexar a outras bolas maiores de play-doh representando espaços de memória, e que podem ser combinados para vinculá-los (como em uma estrutura de dados vinculada) ou mesclar juntos (como em um contíguo). espaço de memória). Usando cores diferentes para os espaços de memória apontados e os ponteiros também ajudam. Mas eu ainda acho que a coisa Memória-como-Grade funciona melhor, pois você pode mostrar claramente que apontar é realmente uma questão de "endereçamento", como em um "mapa / grade". Considerando que o modo Play-doh ainda os confunde em pensar que as coisas realmente "tocam" umas às outras na memória.
A coisa da Copa da Água também foi usada diretamente por uma colega, mas eu não sei se ela veio com ela. Foi uma abordagem interessante, mas notei que muitos alunos ficaram perplexos com a explicação. Algo parecido com a técnica do Coffee Cup do DevSolo . Mas acho que na verdade é enganoso, pois você faz os alunos confundirem contêineres, estruturas de dados, ponteiros e matrizes. Pode ser uma abordagem interessante para explicar as matrizes no começo, eu presumo, mas eu não ficaria por muito tempo.