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
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
A voir également:
- La technique des pointeurs en C
- Logiciel dessin technique gratuit - Télécharger - CAO-DAO
- Samsung ce0168 fiche technique - Forum Samsung
- Pcs problème technique aujourd'hui - Forum Windows 10
- Le bon coin erreur technique - Forum Réseaux sociaux
- Sonia vient de créer son studio d'architecture à bruxelles. en plus des actions menées sur son site web, elle souhaite développer la visibilité de son entreprise. pour cela, elle peut utiliser différentes techniques. ✓ - Forum Loisirs / Divertissements
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
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 !!! +
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 !!! +
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
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
TheFox, le Mr Renard de l'informatique
signez le livre d'or anti fogiel: http://leloup.j.free.fr
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
17 mars 2004 à 22:23
Salut !
j'allais le dire !
merci pour ces infos cyberchrix !!
:-)
j'allais le dire !
merci pour ces infos cyberchrix !!
:-)
foobar... le fou du bar !!!
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
23 mars 2004 à 20:53
Nilses, va ici, tout y est !!
http://www.commentcamarche.net/c/cpoint.php3
http://www.commentcamarche.net/c/cpoint.php3
foobar... le fou du bar !!!
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
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!
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!
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
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
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
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
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
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
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.
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.
18 mars 2004 à 17:15
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
23 mars 2004 à 19:33
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 !!!
23 mars 2004 à 20:24
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! :-)
23 mars 2004 à 20:38
ChriXPiz le roi des céréales !!!
23 mars 2004 à 20:53
:-o