Pointeurs [langage C]
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Pointeurs [langage C]



  1. #1
    ee94

    Pointeurs [langage C]


    ------

    Bonjour
    j'aimerai bien savoir comment déréférencer un "pointeur sur tableau" et un "tableau de pointeur".
    Merci

    -----

  2. #2
    bisou10

    Re : Pointeurs [langage C]

    C'est à dire ? C'est toi qui type tes variables, donc c'est toi qui sait.

    Dans les 2 cas les désignations peuvent être identiques selon le contenu de ton tableau void **tab ou &tab[0], ou (void*)tab[0]; pour gagner en lisibilité, tu peux créer une struct ou un enum pour ton tableau.

    Note bien que c'est souvent le cas en C, où tu peux caster tout le temps.

  3. #3
    grosmatou75001

    Re : Pointeurs [langage C]

    Bon, donne un exemple et ça sera peut-être plus clair. (@ee94)

    Note bien que c'est souvent le cas en C, où tu peux caster tout le temps.
    Attention: Un cast c'est une arme, en effet elle inhibe toute les possibilités de contrôle du code qu'a le compilateur en lui imposant quelque chose. Son emploi est, à de très rares exceptions près, réservé aux programmeurs confirmés qui peuvent justifier précisément le pourquoi du comment. Utilisé par un débutant pour "faire fonctionner" son code un cast cache dans la grande majorité des cas une ou plusieurs erreurs de programmation ou de conception.

    Encore une fois: Un exemple et on vera.

  4. #4
    freepicbasic

    Re : Pointeurs [langage C]

    Le terme "déréférencer" n'existe pas en C
    Il existe un "reference manual" qui est une sorte de dictionnaire décrivant les fonctions disponibles d'un language informatique

    Sur google une recherche de "reference manual c++" donne des exemples

    Les pointeurs sont d'abord déclarés
    ex:
    pointeur simple
    char *Msg;

    ou en tableau
    char *Msg[20];

    ou en pointeur de pointeur
    char **PtrMsg;

    Les pointeurs doivent ensuite, soit être une copie d'une adresse existante;
    char *Msg;
    char MyMsg[20];

    strcpy(MyMsg,"Hello !");
    Msg=MyMsg;

    soit être alloué;
    avec malloc() ou autres fonctions dérivées de alloc() comme farmalloc()...
    ex:
    char *Msg;
    Msg = malloc(20);
    if (Msg==NULL) Error(ErMalloc);

    Une fois utilisé on peut libérer cette mémoire avec free()
    ex:
    char *Msg;
    Msg = malloc(20);
    if (Msg==NULL) Error(ErMalloc);
    ...
    if (Msg<>NULL) free(Msg);

    idem pour le pointeur de pointeur qui pointe un tableau de pointeur

    char **Msg;
    char *MyPtr[20];

    for (i=0 ;i<20; i++) {
    MyPtr[i] = malloc(20);
    if (MyPtr[i]==NULL) Error(ErMalloc);
    }
    ....
    Msg = MyPtr;
    for (i=0 ;i<20; i++) {
    if (Msg[i]!=NULL) free(Msg[i]);
    }

    On ne doit pas libérer une zone qui a un pointeur NULL , ce que renvoit le malloc en cas d'erreur !

    Ces fonctions doivent être utilisées avec modérations car la gestion du malloc n'est pas performante.
    Une utilisations intenses va vite consommer toute la mémoire car chaque allocations cherche une zone mémoire de la taille minimum qui est demandé et va finir par morceler la mémoire avec de nombreuses zones non utilisées.
    A+, pat

  5. A voir en vidéo sur Futura
  6. #5
    bisou10

    Re : Pointeurs [langage C]

    Comme j'étais passé à côté de la question de l'OP !

    Un "dé-référencement" se fait en assignant à ton pointeur une valeur (donc une adresse...) différente.

    Un pointeur sur tableau: dans ce cas, le tableau est alloué statiquement et tu ne peux pas récupérer la place qu'il occupe. Si tu as un pointeur sur ce tableau, alors tu peux le faire pointer sur "autre chose", mais ton tableau, lui existera toujours

    un tableau de pointeur: comme le souligne freepicbasic, ca dépend comment est géré la mémoire sur laquelle pointent tes éléments.

    Dans tous les cas, tu peux récupérer ce que tu as alloué avec malloc() ou ses dérivés. Le reste, non.

  7. #6
    freepicbasic

    Re : Pointeurs [langage C]

    ici:
    http://fr.wikipedia.org/wiki/Pointeur_(programmation)
    Je cite;
    L'étoile, en tant qu'opérateur unaire préfixé, sert également à déréférencer un pointeur, autrement dit à avoir accès au contenu « pointé » par ledit pointeur.

    Voici un petit exemple :

    int a = 2; // Déclaration de a, de type int, initialisé avec la valeur 2.
    int *p = &a; // Déclaration de p, de type pointeur de int, initialisé avec l'adresse de a.
    *p = 5; // Déréférencement de p, pour affecter 5 à la variable a, maintenant a vaut 5.

    Pointeurs en COBOL
    Quel charabia...
    Quel est le fou furieux qui a inventé un terme pareil ?
    Encore un qui n'a pas bien digéré le C et les pointeurs en particuliers.

    Si l'on créé des pointeurs c'est bien aussi pour modifier le contenu de la mémoire.
    Le pointeur ne sert pas qu'a lire un tableau en indexant le pointeur.

    Dans le cas ou on utilise l'allocation dynamique, l'adresse n'apparait pas dans la liste des références des noms de variables créé par l'assembleur, donc cette mémoire si on change son pointeur sera tout bonnement perdu et non déréférencé puisque référencé nulle part à part dans le programme qui lui seul connait cette adresse et il faudrait faire un programme pour lister ces adresses , mais dans quel but?

    Juste un terme pour embrouiller ce qui est simple...

    Notez aussi que l'écriture avec * d'un pointeur s'il n'est pas utilisé pointe a priori n'importe où et si le compilo est sympa sur 0 avec le fameux message "null pointer assigment" qui vous pend au nez...

    alors là !
    "déréférencer" LOL, un truc qui n'existe pas ç'est vraiment du n'importe quoi !
    C est pourtant l'erreur par excellence du débutant.
    A+, pat

  8. #7
    BastienBastien
    Invité

    Re : Pointeurs [langage C]

    Hello,

    Ca me rapelle les longues journées d'été pendant lesquelles je m'amusais à créer un annuaire :

    allocation dynamique de mémoire,
    liste doublement chainée,
    pointeur de pointeur,
    pointeur de fonction,
    fonction à nombre d'argument variable.

    Beaucoup de "Seg Fault".
    J'ai eu des migraines !
    Mais au final, je l'ai eu !

    Bon courage pour ton apprentissage.
    Et saches qu'avec le C, il faut vraiment s'y mettre intensément pendant, genre 3 mois, pour bien integrer les notions.

Discussions similaires

  1. Pointeurs
    Par DorioF dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 30/09/2011, 01h05
  2. Problème exercice C (pointeurs)
    Par invite0dcfc647 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 23/09/2010, 10h20
  3. tableau et pointeurs c++
    Par invite0422bf25 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 11/12/2009, 17h50
  4. ?les pointeurs & les structures()
    Par invite5c6a01fc dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 08/12/2009, 22h14
  5. C: pointeurs, destructions
    Par inviteead871d5 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 15/08/2008, 10h54
Découvrez nos comparatifs produits sur l'informatique et les technologies.