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 :

Prototypes et pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Par défaut Prototypes et pointeurs
    Bonjour,

    Je suis en train de faire quelques révisions pour passer un examen de programmation impérative. J'ai donc récupéré certains sujets de l'année dernière dont notamment un que j'ai fait mais dont j'aurais souhaité savoir si mes réponses sont correctes étant donné que j'ai quelques doutes et qu'il n'y a pas de correction.

    L'énoncé est le suivant :

    Donner le prototype de chacune des fonctions appelées par la fonction main définie ci-dessous.

    Code : 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
    int * g(char); 
    int main(int argc, char *argv[]) {
        int i;
        int *pi;
        int a[10];
        int *a2[11];
        int **a3 = a2;
     
        f0('a');
        i = f1(3);
        f2(&i);
        f3(&g);
        f4(&pi);
        pi = f5(a);
        f6(&a3);
        f7(*(&i));
        a3 = f8(&a[0]);
        f9(***(&a2));
        f10(g('a'));
    }
    Et voici mes réponses :

    1) void f0(char);

    2) int f1(int);

    3) void f2(int *);

    4) void f3(int *(*g) (char)) /* Passage de fonction par pointeur */

    5) void f4(int **);

    6) int *f5(int *);

    7) void f6(int ***); /* Gros doute */

    8) void f7(int);

    9) int **f8(int *);

    10) void f9(int);

    11) void f10(int *);

    Merci.

    Cordialement,
    Laurent

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je crois que c'est correct.
    A noter une ambiguité possible sur les types de retour des fonctions
    - La valeur de retour peut ne pas être utilisée
    - La valeur de retour peut être automatiquement transtypée avant son assignation à une variable

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par diogene
    A noter une ambiguité possible sur les types de retour des fonctions
    - La valeur de retour peut ne pas être utilisée
    - La valeur de retour peut être automatiquement transtypée avant son assignation à une variable
    De la meme maniere, avec les promotions et cast implicites, les parametres ne sont pas aussi evident que ca.

    * f0('a') : en C, 'a' est de type int. Meme si effectivement, il y a de grandes chances que c soit char la reponse attendue.

    * i = f1(3) : 3 peut etre utilise ici pour un signed char, un unsigned char, un int, un unsigned int, un float, un double, etc. Bref n'importe quel type numerique. La encore int est probablement la reponse attendue. Mais les autres ne sont pas reelement fausses.

    Je doute vraiment de l'interet de ce type d'exercice.

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Par défaut
    Je penses pas qu'il faille chercher si loin.

    J'ai oublié d'indiquer que la première réponse est celle donnée avec l'énoncé : void f0(char);

    En tout cas merci pour vos réponses

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    1) void f0(char);
    Aucune preuve que le retour soit void. Mais je suppose que c'est ce qui était demandé.

    3) void f2(int *);
    Idem.

    4) void f3(int *(*g) (char)) /* Passage de fonction par pointeur */
    J'aurais mis :

    4) void f3(int *(*) (char)) /* Passage de fonction par pointeur */

    6) int *f5(int *);
    Ou
    int *f5(int t[10])

    7) void f6(int ***); /* Gros doute */
    Juste.


    A part que sur les retours on ne peut pas dire si cela est vraiment void, c'est une possibilité et on supposera aussi qu'on ne fait pas de casts implicites...

    Jc

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Ouaibou
    void f0(char);
    Si tu veux etre pedant, puisque 'a' a le type int en C, tu peux mettre alternativement void f0(int);

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mai 2004
    Messages : 46
    Par défaut
    Ok merci beaucoup pour vos réponses

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Ouaibou
    Donner le prototype de chacune des fonctions appelées par la fonction main définie ci-dessous.

    Code : 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
    int * g(char); 
    int main(int argc, char *argv[]) {
        int i;
        int *pi;
        int a[10];
        int *a2[11];
        int **a3 = a2;
     
        f0('a');
        i = f1(3);
        f2(&i);
        f3(&g);
        f4(&pi);
        pi = f5(a);
        f6(&a3);
        f7(*(&i));
        a3 = f8(&a[0]);
        f9(***(&a2));
        f10(g('a'));
    }
    Et voici mes réponses :

    1) void f0(char);
    Le type char est promu en int. Inutile de l'utiliser. Mettre int directement. D'ailleurs, le type de 'A' est ... int.

    Le type retourné ne peut pas être spécifié.
    2) int f1(int);
    Un choix parmi d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int f1(long);
    int f1(unsigned int);
    etc.

    Cet énoncé n'a aucun sens en C.

    <...>

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/08/2014, 16h50
  2. Prototypes, pointeurs et const
    Par olivier_u dans le forum C
    Réponses: 5
    Dernier message: 25/04/2013, 14h53
  3. Prototype pointeur de fonction
    Par Kel-T dans le forum C
    Réponses: 6
    Dernier message: 26/01/2012, 19h11
  4. Réponses: 6
    Dernier message: 21/01/2009, 00h13
  5. pointeurs constants et prototype de ma fonction
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 23/05/2006, 18h03

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