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?