Debutant - Pointeurs

Résolu
cs_DeltaX Messages postés 4 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 12 septembre 2005 - 12 sept. 2005 à 15:53
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 12 sept. 2005 à 17:57
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

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
12 sept. 2005 à 16:15
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...
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 sept. 2005 à 16:16
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++
0
cs_DeltaX Messages postés 4 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 12 septembre 2005
12 sept. 2005 à 17:11
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?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 sept. 2005 à 17:32
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DeltaX Messages postés 4 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 12 septembre 2005
12 sept. 2005 à 17:42
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 sept. 2005 à 17:57
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++
0
Rejoignez-nous