La technique des pointeurs en C

Fermé
Nilses - 17 mars 2004 à 22:02
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 - 26 mars 2004 à 09:24
Bonjour à Tous,

Je vais parler d'un sujet ou tous les débutants ont du mal à comprendre c-a-d les pointeurs. J'ai apprécié l'explication de Boninours dans ce site sur les pointeurs mais je suis resté un peux sur ma faim.

Je comprends l'explication imagé de Bobinours sur les raccourcis mais je ne vois pas quand il faut appliquer les pointeurs car si c'est si formidable pourquoi ne pas utiliser constamment des pointeurs ?.

Je comprend la technique entre une variable et son adresse mais pas l'intérêt et quand utiliser. Je vois souvent l'exemple des échanges avec a et b et la valeur de a et b et inversement. Pourquoi utiliser les pointeurs et pas les valeurs des variables et exist il un gain de consommation de mémoire?, de productivité dans le code? Est ce que cela fais moins de ligne.

Dans plusieurs sites, certain expliquent les pointeurs comme sur ce site ou sur developpez.com mais c'est souvent très brut pour les débutant.

Merci pour vos réponses

Nilses

8 réponses

cyberchrix Messages postés 17 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 23 mars 2004 2
17 mars 2004 à 22:21
et bien quand utilisez des pointeurs ??

et bien souvent on utilise les pointeurs en C pour spéficier une adresse et non un contenu !!

on utilise les pointeurs en paramétre de fonctions (passage par référence , passage par adresse,...)

exemple pour toi l'ami !!!

void modifierA (int *a)
{
*a=(*a)+1;
}

void main(void)
{
int a = 1;

modifierA(&a);

printf("Valeur de a: %d" , a);

// résultat >>> Valeur de a : 2
}

car il fo savoir ke chaque variable a une adresse (dans un espace d'adressage) il faut donc des pointeurs pour aller modifier ces variables de n'importe OU !!!!

je sais pas si j'ai étais explicite mais c pas facile à expliquer !!! +
2
Merci Cyberchrix pour ta réponse,

Par rapport à ce tu dis, j'aimerais savoir l'utilité des pointeurs. Je suis allé sur le site de ProgrammationWorld pour l'article des pointeurs mais j'ai toujours pas compris l'intérêt et je veux comprendre ce terme.

Quand je regarde les explications sur les pointeurs, je vois souvent l'exemple d'échange de deux INT.

Int a = 2
Int b = 3

puis il faut créer un autre int, par exemple Int c pour mettre b dans a et a dans b.

Pourquoi utilisé les pointeurs alors que si je dis
Int c = int a soit 2
int int a = Int b soit 3
puis int b = int c soir 2

Je sais que ceci ne fonctionne pas en C mais justement pourquoi et pourquoi avec les pointeurs cela fonctionne et quand utilisé les pointeurs?. Pourquoi ne pas utiliser que des pointeurs?.

J'ai vraiment du mal à comprendre les pointeurs

Merci de votre aide

Keawee
0
cyberchrix Messages postés 17 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 23 mars 2004 2 > keawee
23 mars 2004 à 19:33
et bien un pointeur "pointe" sur une adresse !!!

avec un pointeur tu accède au contenu d'une variable n'importe ou !!

tu utilise d pointeurs pour passer en parametre l'adresse de cette variable !!! (un pointeur koi )

ChriXPiz le roi des céréales !!! 
0
Reeter Messages postés 120 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 6 décembre 2005 > keawee
23 mars 2004 à 20:24
un exemple parmi les plus simples:
un tableau de taille variable:

si tu déclare: int tableau[50];
ton tableau a une taille fixe. par contre, si tu fais:

int nb = 50;
int ptr = (int*)malloc(nb*sizeof(int));

tu récupère un ptr vers un emplacement mémoire (un tableau quoi), et la taille du tableau n'est pas forcément connue a la compilation du prog.
ya plein d'autres applications aux pointeurs (passage en paramètre a des fonctions, etc....), mais j'ai pas le temps de te faire un bouquin! :-)
0
cyberchrix Messages postés 17 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 23 mars 2004 2 > Reeter Messages postés 120 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 6 décembre 2005
23 mars 2004 à 20:38
la tu uitlise cela pour l'allocation dynamique d'un tableau !!!

ChriXPiz le roi des céréales !!! 
0
foobar47 Messages postés 13536 Date d'inscription jeudi 9 janvier 2003 Statut Contributeur Dernière intervention 16 mai 2014 532 > Reeter Messages postés 120 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 6 décembre 2005
23 mars 2004 à 20:53
oui, c'est pas tout à fait pareil !!
:-o

foobar... le fou du bar !!!
0
TheFox Messages postés 145 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 16 mai 2004 10
24 mars 2004 à 08:40
je ne sais pas si ça a été dit avant, mais l'interet de passer l'adresse d'une varialbe au lieu de la variable elle même en parametre de fonction réside surtout dans le fait suivant : lorsque l'on passe un paramètre à une fonction, elle ne travaille pas directement sur ce paramètre, mais sur une copie de celui ci (situé dans sa pile de param...) qu'elle détruit à la fin de son exécution. Ainsi, si on fait des modifs sur une copie de la variable, on ne modifie pas la variable d'origine et les modfis sont perdues. Par contre, si on travaille avec un pointeur, le pointeur copié pointera bien de toutes façons au même endoit que celui passé en paramètre. Ainsi, une modif sur le contenu de la copie du pointeur sera répercuté sur le contenu du pointeur passé à l'origine en paramètre.

TheFox, le Mr Renard de l'informatique
signez le livre d'or anti fogiel: http://leloup.j.free.fr
2
foobar47 Messages postés 13536 Date d'inscription jeudi 9 janvier 2003 Statut Contributeur Dernière intervention 16 mai 2014 532
17 mars 2004 à 22:23
Salut !

j'allais le dire !

merci pour ces infos cyberchrix !!

:-)

foobar... le fou du bar !!!
0
foobar47 Messages postés 13536 Date d'inscription jeudi 9 janvier 2003 Statut Contributeur Dernière intervention 16 mai 2014 532
23 mars 2004 à 20:53
Nilses, va ici, tout y est !!

http://www.commentcamarche.net/c/cpoint.php3

foobar... le fou du bar !!!
0

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

Posez votre question
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
24 mars 2004 à 09:01
Salut tout le monde,

J'espere ne pas dire de conneries (pas un fan des langages a pointeurs, ca fait faire plein d'erreur a tout le monde, meme aux plus experimentes, vive les memory leak...), mais outre l'interet decrit par notre ami au pelage roux, l'utilisation est faite pour sauver de la memoire (eviter d'avoir la meme image dans 10 variables par exemple), et donc les interets des exemples sont limites puisque l'adresse est tout aussi longue que l'int qu'elle contient...me trompe-je?


.  .  Bon!Si on m'empeche de travailler
\_/  Je ne me debattrai pas!
0
TheFox Messages postés 145 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 16 mai 2004 10
24 mars 2004 à 09:59
non non tu as raison, si c'est pour éviter de dupliquer un int ça ne sert pas. mais si c pour allouer de la mémoire en dynamique par exemple, là c'est très utile, ça évite d'allouer un tableau de 1000 qui ne sera pas utilisé à fond, ou au contraire qui sera trop petit.
Après, si ce sont des pointeurs sur des structures ou des objets par exemple, le gain de place mémoire est excellent, et c'est aussi moins "crado" : si on prends l'exemple d'un objet carre composé de quatre objets points, il est préférable de mettre des références sur les points dans l'objet carre plutot que les objets directement

TheFox, le Mr Renard de l'informatique
0
Slt,

Trouvez un exemple de liste chainé dynamique. L'utilisation
des pointeurs en est la force.

@+
0
L'explication de TheFox sur l'interet de l'utilisaiton des pointeurs est pas mal.

J'ai ecrit un petit tuto sur les pointeurs en C.
http://outdial.free.fr/files/Other/pointeurs.htm

Dites le moi si vous trouvez des erreurs :)
--
Jeremy
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210
26 mars 2004 à 09:24
Salut à vous,

Je vois effectivement quelques petits problèmes dans les explications, au demeurant intéressantes de Jeremy :
> dans char tab[20], on ne pourra ranger que 20 caractères, "\0" inclus, lequel n'est pas obligatoire, tant que le programme maîtrise les longueurs manipulées (ce qui exclut l'emploi de "strlen()", "strcpy()", ...). Il est quand même recommandé de l'ajouter.
> ce "\0" est ajouté par le compilateur quand la déclaration s'accompagne d'une affectation (ex : char *alpha = 'abcd....xyz' ;)
> la seule déclaration d'un pointeur, sans réservation de l'espace pointé, est risquée, pour ne pas dire illégale. Le chargement par affectation ou "strcpy()" ne se passera bien que si l'espace pointé
reste dans une zone adressable.
0