Diagrama de memoria como una cuadrícula
Por lo general, lo que hago es representar la memoria como una "cuadrícula", de modo que pueda inventar direcciones, resaltar diferentes espacios de memoria y escribir en los valores de las celdas (o incluso más, sus representaciones binarias) y vincular los punteros en la memoria para Los valores a los que apuntan.
(Y luego mencionar que es una simplificación).
Por lo general, es un momento "ohhhh" para la mayoría de mis alumnos.
Malabares de símbolos
Luego, cuando se trata de que dejen de olvidar cómo usar & y *, es muy simple: preséntelo de la misma manera que hacen los cálculos matemáticos o físicos. Si divide una distancia en km por un tiempo en hora, obtiene una velocidad en km / h. Lo que hay en tiene que estar fuera. Simple.
printf al Rescate
Hacer solo unos pocos ejemplos básicos que representan visualmente lo que explicaste con ellos los reconforta en lo que creen que entendieron, o les da la oportunidad de decir "ah, no entiendo esto".
Sea extenso
Cubra los punteros para tipos simples y asegúrese de que comprendan la diferencia entre el direccionamiento y el tamaño de un tipo de datos, luego las estructuras, luego las matrices y los múltiples niveles.
Luego inicia la aritmética de punteros.
Addendum: Recursion
Usualmente explico la recursión de manera similar, usando una representación visual.
Pídales que impriman el alfabeto usando una función prefabricada que escribe un solo carácter y luego pídales que lo impriman en orden inverso simplemente cambiando dos líneas.
Por lo general, hay un "¿qué ...?" momento, y cuando agrega solo otro parámetro a su printf para imprimir valores numéricos y sangrar los pasos, se convierte en un suspiro de alivio.
Alternativas: el modelo Play-Doh y las copas de agua
De hecho, tuve algunos compañeros de trabajo en una universidad que les mostraron a los estudiantes un video que explica los punteros y los accesos a la memoria usando Play-Doh Paste. Fue increíblemente inteligente y bien hecho, aunque yo nunca utilicé esa técnica, a excepción de los estudiantes muy jóvenes interesados en comprender la programación (pero generalmente aquellos a los que no los llevaría a un lenguaje usando punteros demasiado pronto). Básicamente, utiliza pequeñas bolas de play-doh que puedes unir a otras bolas más grandes de play-doh que representan espacios de memoria, y que puedes combinar para vincularlas (como en una estructura de datos vinculada) o combinarlas (como en un contiguo). espacio de memoria). El uso de diferentes colores para los espacios de memoria apuntados y los punteros también ayudan. Pero sigo pensando que la cosa de la memoria como una cuadrícula funciona mejor, ya que se puede demostrar claramente que la señalización es realmente una cuestión de "direccionamiento", como en un "mapa / cuadrícula". Mientras que el modo Play-doh todavía los confunde al pensar que las cosas realmente se "tocan" entre sí en la memoria.
La cosa de la Copa del agua también fue utilizada directamente por un colega, pero no sé si se le ocurrió. Fue un enfoque interesante, pero noté que muchos estudiantes quedaron desconcertados por la explicación. Algo parecido a técnica de la taza de café de DevSolo . Pero creo que en realidad es engañoso, ya que haces que los estudiantes confundan contenedores, estructuras de datos, punteros y matrices. Podría ser un enfoque interesante para explicar las matrices al principio, supongo, pero no me atendré a ello por mucho tiempo.