Debutant - Pointeurs [Résolu]

Signaler
Messages postés
4
Date d'inscription
dimanche 11 septembre 2005
Statut
Membre
Dernière intervention
12 septembre 2005
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour.
Je débute en programmation(je commence par le C) et, et même si je sais à peu près comment ils fonctionnent(déclaration...), j'ai du mal à voir à quoi peuvent bien servir les pointeurs Quelqu'un peut-il me montrer, dans son explication, un exemple qui montre clairement ce que les pointeurs font? Il parait d'ailleurs qu'ils sont plutôt importants alors j'aimerais bien comprendre quand il faut les utilier.

6 réponses

Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
Le pointeur "pointe" (comme son nom l'indique) sur une case mémoire. ça te permet donc d'avoir accès à cette case assez rapidement.
C'est très utile dans le cas de passage de paramètres d'une fonction, notamment dans le cas de paramètres "volumineux".

Un exemple: tu travailles sur des images (tableau à 2 dimensions) de 1024x1024. Dans la fonction CalculRouge(), tu dois compter le nombre de pixels rouges. tu as donc, en schématisant, 2 prototypes possibles:
CalculRouge(Matrice Image);
--> Une copie de la matrice est passée à la fonction, donc il y a 1024x1024x3 éléments à copier
CalculRouge(Matrice * Image);
--> Seul le pointeur de début de matrice est passé, tu as donc gagné du temps et de l'espace mémoire

J'espère que cet exemple t'a éclairé...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
void ChangeAparB(char *psz)
{
char *c = psz;
while(*c) { if(*c 'A') *c 'B';
c++;
}
}

Un pointeur référence une adresse, on peut donc accéder à la mémoire avec un pointeur et modifier ce qui s'y trouve.

ciao...
BruNews, MVP VC++
Messages postés
4
Date d'inscription
dimanche 11 septembre 2005
Statut
Membre
Dernière intervention
12 septembre 2005

Merci.
Donc le pointeur ne sert "que" là où il y a nécessité d'aller plus vite-il doit y avoir de nombreux cas où cela est nécessaire, ne nous méprenons pas ce n'est pas ce que je veux dire..-? Il sert pour accélérer le déroulement du programme et diminuer le nombre de calculs effectués par le processeur?
Donc, un programme peut se passer entièrement de pointeurs, au risque d'être bien plus lent qu'une version où presque chaque variable sera appelée par un pointeur pointant au début de l'espace mémoire alloué à cette variable?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
absolument non, un pointeur est valable si on doit recevoir l'adresse mais pas dans les autres cas sinon on doit déréférencer pour obtenir la valeur et alors perte de cycles pour rien.

ciao...
BruNews, MVP VC++
Messages postés
4
Date d'inscription
dimanche 11 septembre 2005
Statut
Membre
Dernière intervention
12 septembre 2005

Alors là, BruNews, pour le coup, c'est allé très vite! tu parle de déréférencement et de cycle quand je je sais pas du tout(mais alors pas du tout...) de quoi il s'agit...
Plus de présicison peut-être, c'était pas très clair...
Je t'en remercierai.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
int maMultipliPar5(int v)
{
return (v * 5);
}

ici (pas très utile mais simple exemple) si on passait un pointeur, serait:
return (*v * 5);

faudrait lire le pointeur sur pile comme tout param et ensuite relire ce qui est pointé à cette adresse, 2 accès mémoire au lieu d'1 seul.

ciao...
BruNews, MVP VC++