Memory-as-a-Grid-Diagramm
Normalerweise stelle ich das Gedächtnis als "Gitter" dar, so dass ich Adressen erfinden, verschiedene Speicherbereiche hervorheben und in die Zellenwerte (oder noch weiter in ihre binären Darstellungen) schreiben und die Zeiger im Gedächtnis mit den Werten verknüpfen kann, die sie haben zeigen auf. (Und dann noch erwähnen, dass es eine Vereinfachung ist).
Normalerweise ist es für die meisten meiner Schüler ein "ohhhh" Moment.
Symbol Jonglieren
Wenn sie dann aufhören, die Verwendung von & und * zu vergessen, ist es ganz einfach: Präsentieren Sie sie auf dieselbe Weise, wie sie mathematische oder physikalische Berechnungen durchführen. Wenn Sie eine Entfernung in km durch eine Zeit in Stunde teilen, erhalten Sie eine Geschwindigkeit in km / h. Was drin ist, muss draußen sein. Einfach.
printf zur Rettung
Nur ein paar grundlegende Beispiele zu machen, die visuell darstellen, was Sie mit diesen erklärt haben, wird sie in dem trösten, was sie zu verstehen glauben, oder ihnen die Gelegenheit geben, zu sagen, "ah, ich verstehe das nicht".
Seien Sie umfangreich
Behandeln Sie Zeiger für einfache Typen und stellen Sie sicher, dass sie den Unterschied zwischen der Adressierung und der Größe eines Datentyps verstehen, sowie Strukturen, Arrays und mehrere Ebenen.
Starten Sie dann die Zeigerarithmetik.
Anhang: Rekursion
Normalerweise erkläre ich Rekursionen auf ähnliche Weise anhand einer visuellen Darstellung. Lassen Sie sie das Alphabet mit einer vorgefertigten Funktion drucken, die ein einzelnes Zeichen schreibt, und bitten Sie sie dann, es in umgekehrter Reihenfolge zu drucken, indem Sie nur zwei Zeilen ändern.
Normalerweise gibt es ein "Was zum ...?" Moment, und wenn Sie Ihrem printf nur einen weiteren Parameter hinzufügen, um numerische Werte zu drucken und die Schritte einzurücken, wird dies zu einem erleichterten Seufzer.
Alternativen: Das Play-Doh-Modell und die Wasserbecher
Ich hatte tatsächlich einige Kollegen an einer Universität, die den Studenten ein Video zeigten, in dem Zeiger und Speicherzugriffe mit Play-Doh-Paste erklärt wurden. Es war unglaublich clever und gut gemacht, obwohl ich diese Technik selbst nie wirklich angewendet habe, außer bei sehr jungen Lernenden, die daran interessiert waren, Programmieren zu verstehen (aber normalerweise würde ich sie nicht zu früh mit Hilfe von Zeigern zu einer Sprache führen). Grundsätzlich werden winzige Bälle aus play-doh verwendet, die Sie an andere größere Bälle aus play-doh anhängen können, die Speicherbereiche darstellen, und die Sie kombinieren können, um sie entweder zu verknüpfen (wie in einer verknüpften Datenstruktur) oder zusammenzuführen (wie in einer zusammenhängenden Struktur) Speicherplatz). Das Verwenden verschiedener Farben für die Speicherbereiche, auf die verwiesen wird, und die Zeiger helfen ebenfalls. Aber ich denke immer noch, dass das Memory-as-a-Grid-Ding besser funktioniert, wie Sie deutlich zeigen können, handelt es sich bei dem Zeigen wirklich um "Adressieren", wie auf einer "Karte / einem Raster". Während der Play-Doh-Modus sie immer noch verwirrt zu denken, dass sich die Dinge im Gedächtnis wirklich berühren.
Die Sache mit dem Wasserbecher wurde auch direkt von einer Kollegin benutzt, aber ich weiß nicht, ob sie darauf gekommen ist. Es war ein interessanter Ansatz, aber ich bemerkte, dass viele Schüler von der Erklärung verwirrt waren. Etwas, das der DevSolo-Kaffeetassentechnik ähnelt . Aber ich denke, es ist tatsächlich irreführend, da Sie die Schüler dazu bringen, Container, Datenstrukturen, Zeiger und Arrays zu verwechseln. Ich nehme an, dass es ein interessanter Ansatz ist, Arrays am Anfang zu erklären, aber ich würde mich nicht lange daran halten.