IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Comprendre les pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Par défaut Comprendre les pointeurs
    Bonjour bonsoir a toutes et a tous

    Avant tout, Pardonnez mon orthographe, j'ai un clavier QWERTY

    Je suis un étudiant en informatique 2eme année, j'ai validé tout mes modules sauf les modules de langage C.

    Le plus grand problème c'est les pointeurs, en effet j'ai du mal a les utiliser dans ma tête sa sature, j'ai lu tout les tutos proposés par notre cher ami Google y compris ceux de site mais toujours a la case départ.

    je sais que nombreux d'entre vous maîtrisez ca parfaitement, je demande a ceux qui maîtrisent les pointeurs qu'ils m'expliquent a leurs facon avec des exemple pour illustrer la chose.

    j'espere que ce n'ai pas trop demander pour vous

    Tres cordialement

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Par défaut
    un pointeur renvoie vers un numéro de case mémoire, et non le contenu de cette case
    il suffit de mettre un "p" au début du nom du pointeur pour s'en rappeler

    c'est utile pour se déplacer dans un tableau (ensemble de cases) en s'aidant du pointeur

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Par défaut
    Bonsoir

    Pour la définition, on va dire que je l'ai connais par coeur, j'essaye de m'en servir, mais il suffit de voir un %d et un %p avec des variable qui commencent par des étoiles sachant que je sais même pas dans quel but sont faits ses pointeurs, a part voir une variable se faire appeler de deux manières différentes...

    Cordialement

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    Jusqu'à preuve du contraire, le clavier qwerty excuse les fautes d'accents et les manques de cédilles, mais certainement pas les fautes d'orthographe ou de grammaire...

    Ta question est extrêmement vaste, on ne sait pas où commencer. Le plus important est d'avoir une définition claire et précise de ce qu'est un pointeur. Je trouve celle de ShinobiX1 trop vague par exemple, surtout quand ça attaque la partie tableau. Pointeurs et tableaux sont proches mais c'est un débat d'un niveau supérieur.

    Ce qu'il faut retenir, c'est qu'un pointeur est une variable qui contient une adresse (= dont la valeur est une adresse), et normalement cette adresse est celle d'une autre variable. Comme une adresse seule ne permet pas de savoir quel type de données on doit lire, le pointeur est typé : il porte donc en lui-même le type supposé de la donnée qui se trouve à l'adresse donnée par sa valeur.

    Voilà pour la définition d'un pointeur. Il y a ensuite les opérateurs & et * que tu dois connaitre, à relier aux notions d'indirection et de déréférencement. Il y a ensuite les concepts de pointeurs contenant l'adresse du début d'un bloc (fonctions malloc, calloc, realloc et free) de données du même type. Pour finir, tu pourras voir le lien entre tableau et pointeur (http://gradot.wordpress.com/2012/08/...ointeurs-en-c/ mais ça commence déjà à être avancé, il faut déjà bien comprendre le pointeur en lui-même). On ne va pas tout détailler ici car il faudrait plusieurs heures pour tout écrire. Le plus simple et constructif est sans doute que tu poses des questions précises sur les points qui te causent soucis.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Moi je dis tout simplement, pose tes questions par rapport à ce que tu ne comprends pas et alors nous pourrons t'aider avec des exemples à la clé si nécessaire
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    L'exemple le plus simple pour montrer les pointeurs et leur utilité, c'est la fonction qui inverse deux entiers.

    Si on le fait naïvement avec des paramètres reçus par valeur, ça ne marche pas:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
     
    /*La fonction reçoit des copies des entiers*/
    void inverser(int gauche, int droite)
    {
    	/*On inverse les entiers reçus*/
    	int tmp = gauche;
    	gauche = droite;
    	droite = tmp;
    }
     
    int main(void)
    {
    	int a = 10;
    	int b = 42;
    	printf("Avant appel: a = %d, b = %d\n", a, b);
    	inverser(a, b);
    	printf("Après appel: a = %d, b = %d\n", a, b);
    	return 0;
    }

    Par contre, si les entiers étaient dans un tableau, ça marcherait:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <stdio.h>
     
    int g_tableau[10];
     
    /*La fonction reçoit les indexes des entiers dans le tableau*/
    void inverser(int indexGauche, int indexDroite)
    {
    	/*On inverse les entiers aux indexes indiqués*/
    	int tmp = g_tableau[indexGauche];
    	g_tableau[indexGauche] = g_tableau[indexDroite];
    	g_tableau[indexDroite] = tmp;
    }
     
    int main(void)
    {
    	g_tableau[3] = 10;
    	g_tableau[4] = 42;
    	printf("Avant appel: a = %d, b = %d\n", g_tableau[3], g_tableau[4]);
    	inverser(3, 4); /*On passe les indexes où se trouvent les entiers*/
    	printf("Après appel: a = %d, b = %d\n", g_tableau[3], g_tableau[4]);
    	return 0;
    }

    Hé bien les pointeurs, ça comme si toutes les variables du programme étaient dans un grand tableau.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
     
    /*La fonction reçoit les pointeurs vers les entiers (type *ptr dans une déclaration signifie "ptr est un pointeur vers variable de type type")*/
    void inverser(int *pGauche, int *pDroite)
    {
    	/*On inverse les entiers pointés (*ptr hors d'une déclaration signifie "valeur pointée par ptr")*/
    	int tmp = *pGauche;
    	*pGauche = *pDroite;
    	*pDroite = tmp;
    }
     
    int main(void)
    {
    	int a = 10;
    	int b = 42;
    	printf("Avant appel: a = %d, b = %d\n", a, b);
    	inverser(&a, &b); /*On passe les adresses où se trouvent les entiers ( &a signifiant "adresse de a")*/
    	printf("Après appel: a = %d, b = %d\n", a, b);
    	return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Moi je dis tout simplement, pose tes questions par rapport à ce que tu ne comprends pas et alors nous pourrons t'aider avec des exemples à la clé si nécessaire
    Bonjour

    ca vous sert à quoi les pointeurs, en temps que programmeurs ?

    Pour se déplacer, l'homme à besoin de ses deux jambes, il court pour aller vite, ensuite on à eu les inventions comme le vélo jusqu'à la Ferrari de Alonso . Les différents inventions qui ont été faites ont pris en comptes 3 arguments : gain de temps, moins d'effort et aussi sur la masse déplacée (déménagement avec des camions par exemple)... et pour les pointeurs?

    Cordialement

Discussions similaires

  1. Je n'arrive pas à comprendre les "pointeurs"
    Par andrianiaina dans le forum Débuter
    Réponses: 7
    Dernier message: 26/03/2012, 14h35
  2. Réponses: 4
    Dernier message: 13/08/2004, 18h39
  3. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31
  4. pointeurs, toujours les pointeurs :/
    Par giviz dans le forum C
    Réponses: 16
    Dernier message: 08/10/2003, 15h02
  5. Pb de débutant sur les pointeurs!!!
    Par benji17c dans le forum C
    Réponses: 6
    Dernier message: 30/09/2003, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo