55
303/10/Monday 21h34
Apprenez à programmer en C / C++ ! - Le Site du Zéro
Page 116 sur 377
http://www.siteduzero.com/tuto-29-8-0-apprenez-a-programmer-en-c-c.html
Est-ce que j'ai besoin de vous expliquer encore une fois comment ça marche ? En théorie, mes explications précédentes devraient
suffire, je ne peux rien vous apprendre de nouveau.
Mais bon allez, pour la forme, et parce que c'est un chapitre important, je vais me répéter encore une fois. Il paraît qu'en rabâchant les
mêmes choses ça finit par rentrer, si c'est le cas tant mieux pour vous
Explications :
1. Les variables heures et minutes sont créées dans le main.
2. On envoie à la fonction decoupeMinutes l'adresse de heures et minutes.
3. La fonction decoupeMinutes récupère ces adresses dans des pointeurs appelés pointeurHeures et pointeurMinutes. Notez que, là
encore, le nom importe peu. J'aurais pu les appeler h et m, ou même encore heures et minutes (mais je ne veux pas que vous
risquiez de confondre avec les variables heures et minutes du main, qui ne sont pas les mêmes
)
4. La fonction decoupeMinutes modifie directement les valeurs des variables heures et minutes en mémoire car elle possède leurs
adresses dans des pointeurs. La seule contrainte, un peu gênante je dois le reconnaître, c'est qu'il faut impérativement mettre
une étoile devant le nom des pointeurs si on veut modifier la valeur de heures et minutes. Si on n'avait pas fait ça, on aurait
modifié l'adresse contenue dans les pointeurs, ce qui aurait servi... à rien
De nombreux lecteurs m'ont fait remarquer qu'il était possible de résoudre le "problème" sans utiliser de pointeurs. Oui,
bien sûr que je sais que c'est possible, mais il faut contourner les règles que nous nous sommes fixées : on peut utiliser des
variables globales (bêrk), ou encore faire un printf dans la fonction (alors que c'est dans le main qu'on veut faire le printf !)
Bref, si vous aussi vous trouvez un moyen de résoudre le problème autrement, vous emballez pas. Ce n'était qu'un exemple un
peu "théorique" pour vous montrer l'intérêt des pointeurs. Dans les prochains chapitres cet intérêt vous paraîtra de plus en plus
évident
Comme le disait mon prof d'info : "Les pointeurs c'est bon, mangez-en"
Moi, les premiers temps, ça m'a surtout donné une sacrée migraine
Y'a pas de secret, pour bien comprendre les pointeurs, il faut pratiquer.
Là encore les exemples étaient simples, mais bientôt nous ferons des programmes plus complexes (ne serait-ce que dans les prochains
chapitres) et il faudra savoir être patient.
Si vous êtes comme moi, vous allez faire planter misérablement vos programmes. Et pas qu'une fois. Je vous l'ai dit, j'ai mis des mois à
acquérir ce que j'appelle "le réflexe des pointeurs". Pendant ce laps de temps, je mélangeais complètement *truc, &machin, truc,
machin... J'avançais à petits pas, en essayant de modifier 2-3 caractères par-ci par-là pour essayer de faire marcher mon programme et,
surtout, comprendre ce que je faisais.
Aujourd'hui, j'arrive enfin à ne pas me planter trop lamentablement quand je programme. En général, je ne fais plus d'erreurs de base,
même si ça arrive à tout le monde hein, même aux meilleurs
Quant à vous, je ne saurais trop vous conseiller de relire ce chapitre autant de fois que nécessaire et de faire des tests. Ne vous affolez
pas si les premiers temps vous n'y arrivez pas bien, vous savez désormais que c'est un phénomène complètement normal
Petit résumé avant de se quitter
Les pointeurs ont un gros défaut : ils vous font mélanger plein de choses. Je le sais : dès que j'ai voulu apprendre à me servir des
pointeurs je confondais tout.
Je ne peux pas vraiment éviter ça pour vous : il va falloir que vous repassiez ce chapitre encore et encore pour ne plus confondre.
Ceci étant, un énième résumé avant de terminer le chapitre ne fera de mal à personne.
Voici donc comment je résumerais les choses
très simplement :
En C, on peut créer 2 choses dans la mémoire : des variables et des pointeurs.
Les variables : c'est avec elles que nous avons travaillé jusqu'ici. Créer une variable est très simple : il suffit d'indiquer le type de
la variable ainsi que son nom.
Code : C
long maVariable = 0; // Variable créée en mémoire (valeur mise à 0)
Si on écrit &maVariable, on obtient l'adresse de la variable en mémoire
Les pointeurs : ce sont des variables un peu particulières car elles prennent pour valeur
l'adresse d'autres variables. Pour créer un
pointeur vide (qui ne contient l'adresse d'aucune variable), on fait ceci :
Code : C