Ist es beim Unterrichten von C besser, Arrays vor oder nach Zeigern zu unterrichten? [closed]

Lesezeit: 6 Minuten

Benutzer-Avatar
Uri

Für diejenigen unter Ihnen mit Erfahrung in der Lehrplanentwicklung: Was ist die beste Strategie in Bezug auf Arrays?

Ich habe einige Schulen gesehen, die Arrays nach Variablen und Kontrollstrukturen lehren, oft bevor sie überhaupt Funktionen lehren. Dies ermöglicht das Lehren einiger rudimentärer Algorithmen usw. Allerdings bringt es dann das Problem mit sich, wie Arrays an Funktionen übergeben werden, so dass es notwendig ist, zu den Arrays zurückzukehren, denen Zeiger beigebracht werden, und die Dinge zu reparieren.

Eine andere Möglichkeit besteht darin, von Variablen und Kontrollstrukturen zu Funktionen zu wechseln und dann Zeiger zu lehren, und sobald Sie Zeiger haben, Arrays von Grund auf zu lehren und diese dann zu verwenden, um zur dynamischen Speicherzuweisung zu gelangen.

Für mich ist die zweite Option sinnvoller, da es bei Arrays im Gegensatz zu einfachen Variablen leicht ist, “Grenzen zu überschreiten”, aber Schüler, die noch nichts über Speicher und Zeiger gelernt haben, verstehen möglicherweise nicht, was außerhalb dieser Grenzen liegt.

Allerdings interessiert es mich zu wissen, was andere denken.

Ich denke, der beste Ansatz ist, 1 Konzept auf einmal einzuführen. Sie müssen Arrays im ersten Modul nicht zu 100 % erklären. Sie können fast alles entwirren, indem Sie jeweils 1 Konzept einführen.

Ich würde sie in dieser Reihenfolge unterrichten: Arrays, Pointers, Arrays+Pointers, OtherStuff[N].


Arrays:

Sie können zunächst einfache Arrays unterrichten, damit sie die Möglichkeit verstehen, mehrere Daten-Slots über einen einzigen Variablennamen zugänglich zu machen.

//The following doesn't need an understanding of pointers
int x[10];
x[0] = 5;

Hinweise:

Dann können Sie über Pointer und ihre Funktionsweise unterrichten, beginnend mit einigen einfachen Beispielen:

int y = 5;
int *p = &y;
*p = 6;
printf("%i\n", y);

Stellen Sie sicher, dass Sie besonders betonen, dass ein Zeiger genau wie jede andere Variable ist. Es speichert eine Speicheradresse.

Es ist noch nicht nötig, in den Stack vs. Heap zu gehen.


Arrays+Zeiger:

So iterieren Sie über Arrays mit Zeigern:

int x[10];
x[0] = 5;
x[1] = 6;
int *y = x;
printf("%i\n", *y);//prints the first element
y++;
printf("%i\n", *y);//prints the second element

Dann kannst du kompliziertere Dinge unterrichten…

  • Wie man Zeigerarithmetik macht.
  • Array + i Abkürzung für Array[i]
  • Übergeben von Arrays an Funktionen als Array-Pointets vs. Zeigerparam + Größenparam
  • Wie Arrays kontinuierliche Speicherblöcke sind
  • Erklären Sie Zeichenfolgenliterale, Puffer, …
  • Funktionsweise von sizeof mit Zeigern vs. Array-Typen (Zeigergröße vs. Puffergröße)
  • Erklären Sie kompliziertere Konzepte wie das Zuweisen von Speicher, den Stack und den Heap
  • Mehrere Ebenen der Indirektion
  • Verweise
  • Wie mehrdimensionale Arrays funktionieren

In allen Beispielen wird stark von sizeof und Druckadressen Gebrauch gemacht. Es hilft wirklich zu verstehen, was los ist.

  • Für fortgeschrittene Themen können mehrdimensionale Arrays nützlich sein. Kompromisse bei der Darstellung einer 2D-Struktur als „int **arr“ mit expliziter 2D-Indizierung oder „int *arr“ mit manueller Indizierung können hilfreich sein, wenn die Schüler bereit sind.

    – Herr Fooz

    22. März 2009 um 1:17 Uhr

  • Heh, so wurde es mir beigebracht. Es hat gut funktioniert.

    – Devin Jeanpierre

    22. März 2009 um 1:18 Uhr

  • @Devin Jeanpierre: Ja, wenn Sie entschlossen sind, etwas zu lernen, können Sie es schließlich verstehen, auch wenn die erklärten Konzepte stark miteinander verflochten sind. Aber nicht jeder ist entschlossen, das jeweilige Thema zu lernen, daher ist das schrittweise Lernen in linearer Reihenfolge am einfachsten.

    – Brian R. Bondy

    22. März 2009 um 1:21 Uhr

  • Wo fügst du dort Funktionen ein? Wie vermeiden Sie das Problem “Array an eine Funktion übergeben”?

    – Uri

    22. März 2009 um 4:25 Uhr

  • @Uri: in anderen Abschnitt hinzugefügt

    – Brian R. Bondy

    22. März 2009 um 7:55 Uhr

Ich würde zuerst Zeigen beibringen. Sie können erklärt werden, ohne Arrays zu lehren. Beim Unterrichten von Arrays könnte ich mich dann auf Zeiger beziehen, wenn ich den Ausdruck erkläre a[i]und wenn erklärt wird, wie man sie an Funktionen übergeben kann.

Überdenke die Dinge nicht.

Diese Konzepte so klar und ansprechend wie möglich zu vermitteln, ist VIEL wichtiger als die Reihenfolge, in der Sie sie ausführen.

Ich würde vorschlagen, zuerst die Grundlagen von Arrays zu berühren und später Zeiger zu machen und Arrays erneut zu besuchen (diesmal ausführlicher).

Sie sollten Arrays zuerst unterrichten, da sie in fast jeder anderen Sprache existieren und einfacher zu verstehen sind. Zeiger oder einige Aspekte von Zeigern bauen auf dem auf, was über Arrays gelernt wurde. Das ist die organische Ordnung, imho, und wie ich sie damals gelernt habe.

Ich gehe davon aus, dass Sie C Schülern beibringen, die bereits wissen, wie man in einer anderen Sprache wie Java (oder zu meiner Zeit Pascal) programmiert. Ich glaube nicht, dass C eine gute Sprache ist, um Anfängern das Programmieren beizubringen.

Ich würde zuerst Zeigen beibringen. Dies ist eine der wichtigen neuen Ideen, die Sie in C lernen werden. Sie werden das Konzept von Arrays bereits aus anderen Sprachen kennen, daher besteht keine Dringlichkeit, dies zuerst zu lehren. Wenn Sie also Arrays in C behandeln, können Sie darüber sprechen, dass sie im Wesentlichen syntaktischer Zucker für Zeigerarithmetik sind, ein Konzept, mit dem sie jetzt vertraut sind.

  • Sie scheinen anzudeuten, dass Pascal keine Zeiger hat. Ich habe seit vielen Jahren nicht mehr mit Pascal gearbeitet, aber zu meiner Zeit hatte Pascal Hinweise. Ich habe dort zuerst von ihnen erfahren, da ich ein paar Jahre lang nicht zu C gekommen bin.

    – GrünMatt

    27. Juli 2010 um 18:55 Uhr

Sie sollten gleichzeitig unterrichtet werden.

Das Beispiel eines eindimensionalen Arrays, auf das als Zeiger auf die Basis mit Offset (Schriftgröße * Index) zugegriffen wird, sollte auftauchen.

dh

a[i] is equivalent to *(a + i)

  • Sie scheinen anzudeuten, dass Pascal keine Zeiger hat. Ich habe seit vielen Jahren nicht mehr mit Pascal gearbeitet, aber zu meiner Zeit hatte Pascal Hinweise. Ich habe dort zuerst von ihnen erfahren, da ich ein paar Jahre lang nicht zu C gekommen bin.

    – GrünMatt

    27. Juli 2010 um 18:55 Uhr

Benutzer-Avatar
Bobby Shaftoe

Ich unterrichte Zeiger, bevor ich mich um Arrays kümmere. Typischerweise sind die Schüler, die ich sehe, jedoch bereits in ihrer ersten CS-Klasse in einer anderen Sprache mit Arrays konfrontiert worden. Aber selbst ich habe C in der ersten CS-Klasse unterrichtet, ich habe Zeiger vor Arrays geschrieben und Arrays in Form von Zeigern beschrieben. Nur weil es heutzutage in Mode ist zu denken, „niemand wird jemals wissen müssen oder wollen, wie Computer tatsächlich funktionieren“, heißt das nicht, dass es wahr ist.

1226290cookie-checkIst es beim Unterrichten von C besser, Arrays vor oder nach Zeigern zu unterrichten? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy