+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre du Club
    Inscrit en
    janvier 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 62
    Points : 66
    Points
    66

    Par défaut Pointeur sur void

    Bonjour,
    Je voudrais savoir le sens de:

    void *in et de void **out? dans l'instruction suivante:
    Code :
    int IOCTL(call_t *c, int option, void *in, void **out);
    Merci

  2. #2
    Responsable Modération
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 515
    Points : 14 180
    Points
    14 180

    Par défaut

    Bonsoir,

    • in est un pointeur vers des données au format indéfini (void) ;
    • out est un pointeur vers un pointeur vers des données au format indéfini (void) ;


    L'idée est que, d'une part, comme tu ne connais pas à l'avance le format des données que tu vas transmettre ou recevoir de ta fonction, tu ne pourras le faire que de manière indirecte en passant l'adresse de ces données, adresse qui, elle, a toujours le même format quelque soit ce que l'on y trouve.

    Ensuite, tu vas passer ce pointeur à ta fonction en entrée pour qu'elle puisse aller chercher les données, puis elle va t'en retourner un autre en fin de traitement pour que, toi, tu puisses aller lire les données modifiées. Il faut donc que tu lui passes l'adresse d'un pointeur « void * » pour qu'elle puisse le remplir. Concrètement, à l'usage, ça va donner quelque chose ressemblant à ceci :

    Code :
    1
    2
    3
    4
    5
        int         x = 10;          /* Donnée à transmettre */
        void *      p_entree = &x;   /* Adresse de la donnée à lire (la variable x) */
        void *      p_sortie = NULL; /* Pointeur recevant en retour l'adresse des données renvoyées par la fonction */
    
        ioctl (CODE_DE_L_APPEL,option,p_entree,&p_sortie);

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •