Je dis ça dans le but de poser une question : est ce que quelqu'un saurait expliquer ce qui fait peur ou je ne sais quoi au gens avec les pointeurs ? Une fois qu'on a dit que c'est comme des variables, sauf que les "cases" mémoires auxquelles on accède avec ces variables (les pointeurs) contiennent non pas de l'information directement mais l'adresse d'une autre "case" mémoire, je vois pas bien ce qui n'est pas clair
Pourtant je vois bien autour de moi que des gens galère avec les pointeurs, mais j'arrive pas à voir pourquoi...
J'ai passé beaucoup de temps avec des copains à l'école puis avec des collègues au bureau afin de leur faire comprendre de quoi il retournait et comment les utiliser (pour les seconds, c'était surtout pour arrêter de passer mes journées à déboguer leur code, voire mes nuits lorsque les projets étaient en retard).
Il semble qu'il y ait plusieurs cas de figure récurrents qui se présentent :
Il y a tout d'abord ceux qui font carrément un blocage sur la possibilité d'adresser le contenu de la mémoire avec une variable, et qui ont parfois même des difficultés à utiliser les tableaux. J'ai remarqué que bien souvent ce sont des gens qui ont commencé à apprendre la programmation avec BASIC sans avoir jamais utilisé les PEEK et les POKE. Ils doivent probablement avoir des difficultés pour intégrer le concept
(formation d'esprit inadaptée ?).
Ensuite il y a ceux qui ont compris le principe, mais qui s'emmêlent régulièrement les crayons entre le pointeur, la variable pointée et l'adresse de la variable pointée. Mais ça passe généralement avec une bonne explication (moyen mnémotechnique) et un peu de pratique.
Il y a aussi ceux qui maîtrisent bien les manipulations simples, mais qui ne s'en sortent plus quand ça devient plus compliqué (par exemple quand il s'agit de trouver la syntaxe pour caster un pointeur accessible au travers d'un autre pointeur, et qui pointe vers un tableau de pointeurs pointant vers des variables contenant des adresses de fonctions retournant un pointeur de pointeur, afin de l'incrémenter... :sick: )
(manque de concentration ? cours mal assimilé ?).
Enfin, il a ceux auxquels
grumff doit faire allusion, pour qui les problèmes de réservation de mémoire sont un vrai cauchemar, parce qu'il ne savent plus trop vraiment ni quoi ni quand libérer parmi les zones qu'ils pointent avec leurs pointeurs
(brouillons, manque d'organisation ?).
Voire pire, il y ceux qui ne se posent carrément pas de question, qui se trompent sans vergogne ni remords, et qui laissent derrière eux un code en l'état de ruine. De ceux-là, j'en ai connu un en particulier (un sous-traitant) qui m'a "pondu"
des fonctions qui retournaient un pointeur pointant vers les variables locales de ces mêmes fonctions
, le tout noyé au milieu de dizaines de milliers de lignes de code... au final ça a donné un programme qui présentait de temps en temps, et très aléatoirement, de petits écarts par rapport aux résultats attendus
, mais jamais au moment où je tentais de le déboguer :mouais: :hein: ... il s'est passé des mois avant que je trouver la cause du problème !
Pour reprendre ce que je disais, je suis persuadé que si on avait commencé à apprendre à tous ces gens ce qui se passe, à un plus bas niveau derrière le code que leurs programmes en C allaient générer, et notamment comment la mémoire est organisée et comment le processeur y accède, alors ils auraient mieux compris ce qu'ils faisaient et ainsi ils auraient pu éviter un grand nombre de leurs erreurs... et ça m'aurait épargné bien du temps et de l'énergie pour corriger tous ces bugs
.