Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1482 connectés 

  FORUM HardWare.fr
  Programmation

  [c] les pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] les pointeurs

n°170250
lamatrice
Posté le 03-07-2002 à 09:08:47  profilanswer
 

j'ai lu plein de doc mais je viens d'un language qui ne possède pas de pointeurs.
 
je sais ce qu'est un pointeur, mais je ne vois pas très bien sont utilité
 
je voudrais savoir par exemple : scanf("votre nom",&a)
pourquoi je doit mettre '&a' et pas 'a'
 
de même pourquoi avec la fonction printf je ne doit pas l'utiliser.
 
 
en gros, quel intérets ?
 
je sais pas si je suis claire, mais une étincelle pourrais décalencher un grand feu de joie
 

mood
Publicité
Posté le 03-07-2002 à 09:08:47  profilanswer
 

n°170251
LetoII
Le dormeur doit se réveiller
Posté le 03-07-2002 à 09:20:02  profilanswer
 

Bon je me lance, je vais essayer de t'expliquer (quand on connait mes capacités pédagogiques ça fait peur).
 
Les valeurs de tes variables sont stocké dans la mémoire de la machine. Par exemple lorsque tu déclare un long on te donne un espace méoire de 4octets où tu peux stocker la valeur de la variable.
 
Un pointeur est une variable qui contient l'adresse d'une autre variable, c'est à dire l'endroit de la méoire où se trouve la valeur de ta variable.
 
Prenons un exemple:
 

Code :
  1. #include <stdio.h>
  2. void exempleProc1(int i, int j)
  3. {
  4. i += j;
  5. }
  6. void exempleProc2(int *i, int *j)
  7. {
  8. *i += *j;
  9. }
  10. int main()
  11. {
  12.    int a,b;
  13.    a = 1;
  14.    b = 2;
  15.    exempleProc1(a,b);
  16.    printf("%d,%d",a,b);
  17.    /*affiche 1,2*/
  18.    exempleProc2(&a,&b);
  19.    printf("%d,%d",a,b);
  20.    /*affiche 3,2*/
  21.   return 0;
  22. }


 
Dans le cas de printf on ne fait que lui passer des valeur à afficher donc elle n'as pas besoin d'avoir les adrese des variables contenant ces valeurs.
Pour scanf c'est différent, elle doit modifier tes variables, pour celà tu lui passe leurs adresses pour qu'elle aille modifier les valeurs stockées.


---------------
Le Tyran
n°170253
godbout
Génial.
Posté le 03-07-2002 à 09:21:52  profilanswer
 

Bon ben je sais pas si je vais etre clair non plus mais je vais essayer.
 
Les pointeurs sont tres utiles en parametres de fonction.
 
Un exemple assez con :
 
Une fonction qui imprime des infos sur un client sans pointeurs :
 
EcrireInfo(int age, char *nom, char *prenom, char *adresse, ....
 
C'est ingerable.
Donc pour ca tu te fais une structure CLIENT (avec les infos age, nom, prenom, ...) et tu passes la struct en parametre.
 
Ca donne EcrireInfo(CLIENT *client...
 
En fait je sais pas si ca va t'aider :/


---------------
Super.
n°170254
ashDyson
Si ça saigne, ça peut mourrir.
Posté le 03-07-2002 à 09:23:26  profilanswer
 

lamatrice a écrit a écrit :

 
je voudrais savoir par exemple : scanf("votre nom",&a)
pourquoi je doit mettre '&a' et pas 'a'
 
de même pourquoi avec la fonction printf je ne doit pas l'utiliser.
 
 
en gros, quel intérets ?




 
Les pointeurs servent a une fonction de connaitre l'adresse d'une variable pour pouvoir modifier cette variable.
 
Comme le printf ne modifie aucune des variables que l'on met en parametres, il n'a pas besoin d'utiliser de pointeur.
 
Par contre scanf utilise un pointeur pour pouvoir modifier ta variable 'a'. Le scanf a donc besoin de l'adresse de a, qui est &a!!
 
Il faut toujours un type dans un scanf, et le texte "votre nom" doit etre affiché avec printf, donc:
 

Code :
  1. int a;
  2. printf("un numero" );
  3. scanf("%d",&a);



---------------
www.isamu.fr.st tout sur SuperNova LE shoot them up freeware
n°170256
lamatrice
Posté le 03-07-2002 à 09:27:14  profilanswer
 

merci de vos infos mais comme je le disais, je sais ce qu'est le pointeur( adresse mémoire d'une variable).
 
ce que je voudrais savoir c'est sont intéret  
et ça j'ai pas capter dans vos explication

n°170257
lamatrice
Posté le 03-07-2002 à 09:28:05  profilanswer
 

ah voilà qui semble plus claire

n°170260
lamatrice
Posté le 03-07-2002 à 09:29:07  profilanswer
 

mais pourqoi quand on fait une affectation on utilisa pas le pointeur alors ?
 
 
a=5;
&a=5;

n°170263
LetoII
Le dormeur doit se réveiller
Posté le 03-07-2002 à 09:36:26  profilanswer
 

Code :
  1. int a


 
Ta variable a désigne un entier. Si tu fais a = 5 ton entier prend la valeur 5. &a désigne l'emplacement mémoir où est stocké l'entier, si tu pouvais faire &a = 5, tu modifierais l'endroit où est tocké la variable a, tu lui dirais de la stocker à l'adresse 5. Mais ça on peut pas le faire :D (pas comme ça en tout cas)


---------------
Le Tyran
n°170265
BENB
100% Lux.
Posté le 03-07-2002 à 09:39:08  profilanswer
 

lamatrice a écrit a écrit :

mais pourqoi quand on fait une affectation on utilisa pas le pointeur alors ?
 
 
a=5;
&a=5;
 




Parce que dans le deuxieme cas tu changerais l'adresse de ta variable...
 
et = n'est pas une fonction, donc il n'y a pas de passage par valeur...
 
La raison d'etre du pointeur en C, c'est que les fonction recoivent leurs parametres par valeurs, passer l'adresse permet de modifier la valeur de celle-ci pour l'appelant
 
Une autre utilitée est l'allocation dynamique.

n°170307
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-07-2002 à 10:34:22  profilanswer
 

Un autre avantage des pointeurs, est que ça te permet de passer une adresse en paramètre au lieu d'un objet entier.
 
Par exemple, si tu as une fonction qui prend une structure en paramètre, tu as tout intéret à passer l'adresse de ta structure au lieu de la structure en elle même, c'est plus rapide et ça évite de bouffer de l'espace pile


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 03-07-2002 à 10:34:22  profilanswer
 

n°170309
darkoli
Le Petit Dinosaure Bleu
Posté le 03-07-2002 à 10:37:44  profilanswer
 

lamatrice a écrit a écrit :

merci de vos infos mais comme je le disais, je sais ce qu'est le pointeur( adresse mémoire d'une variable).
 
ce que je voudrais savoir c'est sont intéret  
et ça j'ai pas capter dans vos explication  




 
Par exemple gerer un tableau de donnees dont tu ne connais pas la taille à l'avance mais seulement lors de l'execution.
 
Aussi pour eviter de passer plusieurs Ko a a chaque appel de fonction puisque tu ne transmets que l'adresse.
 
et apres en combinant pointeur et strcutre tu peux faire des listes, des arbres, ... .


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°170313
bjone
Insert booze to continue
Posté le 03-07-2002 à 10:42:15  profilanswer
 

ensuite, je suppose que tu parles probablement du Visual Basic ?
 
si c'est le cas saches que dans le visual basic il y AS des pointeurs.
sauf qu'ils évitent d'en parler tel quel.
 
par exemple:
 
'pointeur: il n'y a pas réellement d'objet crée
Dim Yo As Nodedetruc
'intialisation du pointeur
Set Yo = WindowListMachin.NewItem
 
'là on bien une création d'objet
Dim Yo2 As New NodeTruc
 
le VB est très batard... ( il faut aussi des fois faire un Set Yo = Nothing, pour pouvoir choper un autre objet )
 
 
 

n°170317
bjone
Insert booze to continue
Posté le 03-07-2002 à 10:46:26  profilanswer
 

ou par exemple, tu prends un jeu de voiture:
 
tu as des objets de modèles 3D (qui servent à tracer la voiture)
 
donc tu auras une structure du style:
 
modèle d'objet 3d
{
  liste de points dans l'espace
  liste de polygone
}
 
et des objets "voitures", qui décrivent une voiture
 
voiture
{
 modèle *model;
 float vitesse,direction,poids....
}
 
toutes les "voitures" utiliseront le même modèle 3D, il faudra donc que toutes les instances de voiture pointe sur le même modèle alloué en mémoire.
 
bon c'est ptet pas super limpide :D


Message édité par bjone le 03-07-2002 à 10:47:08
n°170323
youdontcar​e
Posté le 03-07-2002 à 10:51:03  profilanswer
 

bjone a écrit a écrit :

bon c'est ptet pas super limpide :D


au moins tu t'en es rendu compte :D

n°170329
bjone
Insert booze to continue
Posté le 03-07-2002 à 10:58:52  profilanswer
 

bin j'ai essayé de lui faire comprendre que tu as plusieurs objets qui référencent un objet partagé par tout le monde, c'est généralement par pointeur....
 
disons que j'arrives à faire comprendre des concepts de programmation à des potes en leur montrant des jeux, et leur expliquant un peu les structures s'imbriquent les unes dans les autres....

n°170330
bjone
Insert booze to continue
Posté le 03-07-2002 à 11:01:23  profilanswer
 

en gros pour continuer avec mon idée:
 
tu prends need for speed: tu peux croiser plusieurs bagnoles du même modèle dans le jeu...
 
donc quelque part, tu as 1 modèle 3D de la bagnole (qui maintient la géométrie à traçer à l'écran), et 'n' objets qui pointent sur ce modèle, en indiquant des propriétés (position, vitesse, etc, etc...)


Message édité par bjone le 03-07-2002 à 11:01:38
n°170366
LeGreg
Posté le 03-07-2002 à 11:43:03  profilanswer
 

dis nous de quel langage tu viens
comme ca on pourra t'expliquer comment
tu utilises les pointeurs sans le savoir :)
 
LeGreg

n°170381
LeGreg
Posté le 03-07-2002 à 11:54:08  profilanswer
 

Ce qu'il faut savoir c'est que les pointeurs c'est
vraiment bas niveau (notamment l'arithmétique des pointeurs)
et ca n'a rien d'obligatoire dans un langage.
Reste que le C qui est un langage bas niveau
ne connait que ca (les pointeurs).
Donc je crois que ta question est mal posée:  
ce n'est pas "pourquoi je dois utiliser des pointeurs en C?"
tout simplement parce que c'est la facon dont est construite le langage C mais "comment les utiliser" et ca je pense qu'il y a pas mal d'exemple d'utilisation qui ont été donnés.
 
LeGreg

n°170429
lamatrice
Posté le 03-07-2002 à 13:08:12  profilanswer
 

merci pour toutes ces réponses......elles m'éclairent....si si....
 
sinon je fait du java, et du php et j'ai jamais eu besoin d'utiliser les pointeurs (ou alors sans le savoir)

n°170459
ashDyson
Si ça saigne, ça peut mourrir.
Posté le 03-07-2002 à 13:41:39  profilanswer
 

lamatrice a écrit a écrit :

merci pour toutes ces réponses......elles m'éclairent....si si....
 
sinon je fait du java, et du php et j'ai jamais eu besoin d'utiliser les pointeurs (ou alors sans le savoir)




 
En Java, y'a pas de pointeurs mais des references, qui sont ausi dispo en C++. Si tu fais du Java, tu devrai t'en sortir facilement en C++, avec en plus les pointeurs.


---------------
www.isamu.fr.st tout sur SuperNova LE shoot them up freeware
n°170475
kjus
Posté le 03-07-2002 à 13:57:03  profilanswer
 

avec les pointeurs tu peux allouer dynamiquement la mémoire.
par ex tu peux créer un tableau dont tu ne connais pas à l'avance la taille. (ca a deja été dit il me semble..)

n°170512
LeGreg
Posté le 03-07-2002 à 14:30:22  profilanswer
 

lamatrice a écrit a écrit :

 
sinon je fait du java, et du php et j'ai jamais eu besoin d'utiliser les pointeurs (ou alors sans le savoir)




 
tous les mecanismes qui te semblent naturel en java utilisent
des pointeurs en sous-main.  
Java => haut niveau, C => bas niveau
notamment en java ils poussent le paradigme objet au plus loin
ce qui leur permet de faire de la prog objet tres efficace mais leur interdit tous les raccourcis faisables en C.
Le pointeur c'est l'objet de base qui dérive de l'assembleur, en haut niveau on leur donne des noms différents: reference, iterateur, tableau statique ou dynamique, chaine, etc..
Toutes les notions de la prog "elevée" sont traduisibles en C ou en assembleur. L'assembleur ne connait que les registres et les pointeurs, les goto etc.. Le C est une sorte d'assembleur évolué avec des types, des fonctions, des boucles, des macros, des mecanismes d'allocation automatiques etc..
 
Pour ce qui est des references en java, elles sont assez differentes des references en C++ (elles ont juste le meme nom).
En java quand tu manipules une reference, tu manipules l'objet lui-meme (pas d'arithmétique des references, pas d'operateur de deferencement), un peu comme une reference en C++.  
Par contre, une reference peut etre nil et peut etre reassignée dans sa durée de vie (elle fait reference a un autre objet). Un peu comme un pointeur en C/C++.
 
LeGreg

n°178305
Musaran
Cerveaulté
Posté le 18-07-2002 à 00:23:31  profilanswer
 

lamatrice a écrit a écrit :

je voudrais savoir par exemple : scanf("votre nom",&a)
pourquoi je doit mettre '&a' et pas 'a'


En C les arguments sont transmis par valeur. scanf recevrait (inutilement) la valeur de a, alors qu'il veut une adresse pour écrire.
En C++ on pourrait réecrire cette fonction pour recevoir une référence. Alors on mettrait 'a' et elle prendrait tout seule l'adresse de a (sous forme de référence).
 
L'intérêt du pointeur, c'est sa puissance: désigner n'importe quelle variable, existante ou même à venir, où qu'elle soit en mémoire (globale,pile,dynamique).
 
Je connaît ces utilisations des pointeurs/adresses:

Code :
  1. //identité d'objet par son adresse
  2. if(ptr1==ptr2)... //si ptr1 et ptr2 désignent le même objet...
  3. //identité changeante
  4. ptr= test ? &a : &b ;
  5. *ptr=... ; //change a ou b...
  6. //éviter la copie de gros objet
  7. void f(const BigStruct* arg){ //reçoit sizeof(pointeur) octets plutôt que des tonnes...
  8. int tmp= BigStruct->ChampInt ; //...mais travail d'indirection supplémentaire.
  9. }
  10. //valeur de retour complexe de fonction
  11. void analyse(int in , BigStruct* out1 , BigStruct* out2){ //pas de const, la fonction peut modifier l'original
  12. scanf("bla",out1->ChampPtrChar) ; //impossible avec return
  13. }
  14. //parcours rapide de tableau
  15. for(int  i=     0  ; i<     numelem  ; i++) tab[i]=... ; //par indice   (normal)
  16. for(int* p=&tab[0] ; p<&tab[numelem] ; p++)    *p =... ; //par pointeur (plus rapide)
  17. //allocation dynamique
  18. int* ptr= (int*)malloc(num*sizeof(int)) ; //allocation de num int
  19.      ptr= (int*)realloc(ptr,2*num*sizeof(int)) ; //réallocation à 2*num int


 

lamatrice a écrit a écrit :

mais pourqoi quand on fait une affectation on utilisa pas le pointeur alors ?
a=5;
&a=5;


'a' tout seul, c'est juste la variable, sans plus. Après, le contexte décide:

Code :
  1. a=... ; //écrire une valeur dedans.
  2. ...=a ; //lire sa valeur
  3. a++   ; //lire, incrémenter, et écrire

C'est juste les choix de base dans la syntaxe d'un langage...


Message édité par Musaran le 18-07-2002 à 00:25:55

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [c] les pointeurs

 

Sujets relatifs
[C] - Tableaux de pointeurs et liste chainees (ENCORE UN PROB)[C] - Tableaux de pointeurs et liste chainees ( résolu ! )
[C++] Pointeurs sur pointeurs[C] - Listes et pointeurs - comprenez-vous cet énoncé???
[C] Pourquoi pour declarer 2 pointeurs...[C++] fonctions void, pointeurs et creations de structurs (en m tps!!)
[C] Comment ca marche un systeme de listes et pointeurs?[C++] question bête sur la programmation et les pointeurs...
[C] Systeme de listes et pointeurs[Pascal] nombre limite de valeurs en pointeurs
Plus de sujets relatifs à : [c] les pointeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR