459 votes

Quels sont les obstacles à des pointeurs de compréhension et que peut-on faire pour les surmonter ?

Pourquoi les pointeurs tel des principaux facteurs de confusion pour beaucoup d’élèves niveau Collège nouvelle et même les vieilles, en C ou C++ ? Y at-il aucun outil ou processus de pensée qui vous a aidé à comprennent le fonctionnement de pointeurs à la variable, fonction et au-delà du niveau ?

Quelles sont les choses de bonne pratique qui peuvent être faites pour amener quelqu'un au niveau de, « Ah-Ah, je l’ai eu, » sans amener empêtrée dans le concept global ? Fondamentalement, percer comme scénarios.

155voto

Tryke Points 605

Dans ma première Comp Sci de la classe, nous avons fait l'exercice suivant. D'accord, c'était une salle de conférence avec près de 200 étudiants en...

Le professeur écrit au tableau: int john;

John se lève

Le professeur écrit: int *sally = &john;

Sally se lève, points à john

Professeur: int *bill = sally;

Bill se lève, points à John

Professeur: *bill = sam;

John s'assoit. Sam se lève. Le projet de loi et Sally à la fois du point de Sam.

Je pense que vous obtenez l'idée. Je pense que nous avons passé environ une heure à faire ce, jusqu'à ce que nous sommes allés sur la base de pointeur de la cession.

127voto

Wilka Points 13239

Une analogie que j’ai trouvé utile pour expliquer les pointeurs est des liens hypertexte. La plupart des gens peuvent comprendre qu’un lien sur une page web « pointe » vers une autre page sur l’internet, et si vous pouvez copier/coller ce lien hypertexte puis ils tous les deux indiquent la même page web d’origine. Si vous allez éditez cette page d’origine, puis suivez l’une de ces liens (pointeurs), vous obtiendrez cette nouvelle page mise à jour.

49voto

JSN Points 719

La raison pointeurs source de confusion pour beaucoup de gens est que pour la plupart ils viennent avec peu ou pas d'expérience en architecture d'ordinateur. Car beaucoup ne semblent pas avoir une idée de la façon dont les ordinateurs (la machine) est actuellement mis en oeuvre - travail en C/C++ semble étranger.

Une perceuse est de leur demander de mettre en œuvre un simple code binaire en fonction de la machine virtuelle (dans n'importe quelle langue qu'ils ont choisie, python fonctionne très bien pour cela) avec un jeu d'instruction axée sur les opérations de pointeur (charger, stocker, direct/indirect adressage). Puis, demandez-leur d'écrire des programmes simples pour que le jeu d'instructions.

Tout ce qui requiert un peu plus de la simple addition va impliquer des pointeurs et ils sont sûrs de l'obtenir.

27voto

Josh Points 4344

Pourquoi sont des pointeurs sur ces l'un des principaux facteur de confusion pour beaucoup de nouvelles, et même de vieux, le collège des étudiants de niveau dans le langage C/C++?

Le concept d'un espace réservé pour une valeur de variables - cartes sur quelque chose que nous avons appris à l'école, en algèbre. Il n'y a pas un parallèle existant, vous pouvez dessiner sans la compréhension de la façon dont la mémoire est physiquement jeté à l'intérieur d'un ordinateur, et personne ne pense à propos de ce genre de chose jusqu'à ce qu'ils ont affaire à un faible niveau les choses - au C/C++/octet de communication.

Existe-il des outils ou des processus de pensée qui vous a aidé à comprendre comment les pointeurs de travail à la variable, la fonction, et au-delà?

Les adresses des boîtes. Je me souviens quand j'étais en apprentissage de la programmation de BASE en micro-ordinateurs, il y avait ces jolis livres avec des jeux en eux, et il faut parfois pousser des valeurs en particulier les adresses. Ils avaient l'image d'un tas de boîtes, de manière progressive étiquetés avec 0, 1, 2... et il a été expliqué que seule une petite chose (un octet) pourrait s'appliquer dans ces zones, et il y avait beaucoup d'entre eux - certains ordinateurs ont eu 65535! Ils étaient proches les uns des autres, et ils avaient tous une adresse.

Quelles sont les bonnes pratiques de choses qui peut être fait pour ramener quelqu'un à la niveau de, "Ah-ah, je l'ai eu," sans être les enliser dans le concept global? Fondamentalement, foret que des scénarios.

Pour une perceuse? Faire une struct:

struct {
char a;
char b;
char c;
char d;
} mystruct;
mystruct.a = 'r';
mystruct.b = 's';
mystruct.c = 't';
mystruct.d = 'u';

char* my_pointer;
my_pointer = &mystruct.b;
cout << 'Start: my_pointer = ' << *my_pointer << endl;
my_pointer++;
cout << 'After: my_pointer = ' << *my_pointer << endl;
my_pointer = &mystruct.a;
cout << 'Then: my_pointer = ' << *my_pointer << endl;
my_pointer = my_pointer + 3;
cout << 'End: my_pointer = ' << *my_pointer << endl;

Même exemple que ci-dessus, sauf dans C:

// Same example as above, except in C:
struct {
    char a;
    char b;
    char c;
    char d;
} mystruct;

mystruct.a = 'r';
mystruct.b = 's';
mystruct.c = 't';
mystruct.d = 'u';

char* my_pointer;
my_pointer = &mystruct.b;

printf("Start: my_pointer = %c\n", *my_pointer);
my_pointer++;
printf("After: my_pointer = %c\n", *my_pointer);
my_pointer = &mystruct.a;
printf("Then: my_pointer = %c\n", *my_pointer);
my_pointer = my_pointer + 3;
printf("End: my_pointer = %c\n", *my_pointer);

Peut-être cela explique certaines de ses bases par exemple?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X