Précédent   Forum du club des développeurs et IT Pro > C et C++ > C
C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q. C, Avant de poster.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/01/2013, 22h47   #1
boss89
Membre du Club
 
Inscription : janvier 2011
Messages : 57
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 57
Points : 60
Points : 60
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
boss89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 23h22   #2
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

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

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 095
Points : 11 095
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);
Obsidian est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h44.


 
 
 
 
Partenaires

Hébergement Web