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 :

[static_cast] Problème avec un exercice.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut [static_cast] Problème avec un exercice.
    Salut,

    Je suis en train de lire le livre "Thinking in c++ 2nd, Vol. 1" et j'ai de la difficulté à comprendre un exercice. Voici l'énoncé, ça explique tout:
    Define an array of int. Take the starting address of that array
    and use static_cast to convert it into an void*. Write a
    function that takes a void*, a number (indicating a number of
    bytes), and a value (indicating the value to which each byte
    should be set) as arguments. The function should set each byte
    in the specified range to the specified value. Try out the
    function on your array of int.
    Je ne comprend pas exactement ce qu'ils veulent que je fasse. Enfin, j'en suis arrivé à ceci pour le moment:
    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
    #include <iostream>
    using namespace std;
     
    void unefonction( void* pletableau, int nboctets, int valeur);
     
    int main()
    {
        int montableau[10];
        int* p = montableau;
        void* pv = static_cast<void*>(p);
     
        unefonction( pv, sizeof(int), 10);
    }
     
    void unefonction( void* pletableau, int nboctets, int valeur)
    {
         // Aucune idée quoi faire ici.
    }
    Je ne sais même pas si je suis dans le bonne direction... Ça doit être dû à ma compréhension de l'anglais

    Quelqu'un peut me dire si je suis dans la bonne direction ou me dire ce que vous pensez qu'ils veulent que je fasse dans la fonction.

    Merci.

  2. #2
    Membre confirmé
    Avatar de mac&cheese
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 98
    Par défaut
    En gros, si j'ai bien compris, la traduction serai la suivante:
    Definissez un tableau de int. Prenez l'adresse de debut de ce tableau et utilisez static_cast pour le convertir en un void*. Ecrivez une fonction qui prend un void*, un nombre (indiquant un nombre d'octets) et une valeur (indiquant la valeur à laquelle chaque octets devront etre fixés) comme arguments. Cette fonction devrait mettre chaque octet de la plage spécifiée à la valeur spécifiée. Essayer cette fonction sur votre tableau de int
    Est ce que c'est plus clair pour toi?

    Un petit indice: tu n'es pas vraiment dans la bonne direction en ce qui concerne les valeurs de tes arguments...

    Mac & Cheese

  3. #3
    Membre confirmé
    Avatar de mac&cheese
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 98
    Par défaut
    En gros, en reprenant ta fonction de depart, à savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void unefonction( void* pletableau, int nboctets, int valeur)
    ta fonction unefonction doit fixer à la valeur valeur chaque elements de ton tableau pletableau compris dans la plage nboctets.

    Voili, voilou...

    Mac & Cheese

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Citation Envoyé par mac&cheese Voir le message
    ta fonction unefonction doit fixer à la valeur valeur chaque elements de ton tableau pletableau compris dans la plage nboctets.
    C'est justement cela que je n'arrive pas à visualiser... Je cherche comment faire prendre une valeur à mon tableau en passant par le pointeur, mais je ne vois pas comment...

    pletableau = valeur;?
    pletableau[?] = valeur;?

  5. #5
    Membre confirmé
    Avatar de mac&cheese
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 98
    Par défaut
    Citation Envoyé par sekiryou Voir le message
    C'est justement cela que je n'arrive pas à visualiser... Je cherche comment faire prendre une valeur à mon tableau en passant par le pointeur, mais je ne vois pas comment...

    pletableau = valeur;?
    pletableau[?] = valeur;?
    Desole je n'avais pas compris ton probleme.
    quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pletableau[n] = valeur;
    semble plutot correct

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Citation Envoyé par mac&cheese Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pletableau[n] = valeur;
    ..\main.cpp|29|error: pointer of type `void *' used in arithmetic|

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Citation Envoyé par mac&cheese Voir le message
    ta fonction unefonction doit fixer à la valeur valeur chaque elements de ton tableau pletableau compris dans la plage nboctets.
    Je viens de relire ta phrase. Ce que tu dis, c'est que je dois mettre des valeurs quelconques dans mon tableau. Dans la fonction, je mets chaque valeur contenu dans chaque position du tableau dans la variable valeur et je fais queqlue chose avec du genre l'afficher à l'écran, c'est bien ça?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Citation Envoyé par mac&cheese Voir le message
    Est ce que c'est plus clair pour toi?
    Lol, ça doit être ma compréhension du concept qui flanche alors !... je ne comprends pas plus en français

    Qu'est-ce que tu veux dire par "tu n'es pas vraiment dans la bonne direction en ce qui concerne les valeurs de tes arguments..." ?

    Je vais récapituler dans ma tête...
    Je crois que mon tableau est correct... c'est assez simple, un tableau de int avec 10 positions...

    Pour l'adresse de début du tableau, "montableau" devrait contenir cette adresse (vrai?) et donc, je peux la passer à un pointeur de int. Enfin, je crois

    Je convertis ce pointeur en pointeur "void *" comme demandé (le pourquoi m'échappe encore, mais j'y travail ).

    Dans la fonction, je passe mon pointeur (void *). Le nombre d'octets, que je suppose être la grosseur d'un int étant donné que je travail avec des int... le pourquoi m'échappe aussi. Et, la valeur, je suppose qu'ils veulent que chaque position dans mon tableau de int prenne cette valeur.

    Donc, dans cette fonction, j'utilise le pointeur passé pour changer les valeurs à chaque position de mon tableau, c'est ça? Et je dois avoir besoin du nombre d'octets pour pouvoir sauter d'une position à l'autre (du genre "pletableau++"?... incrémenter le pointeur). Et puis, la valeur que je mets à la position en cours.

    Est-ce que tu penses que je trouve ça plus clair avec ce que je vois dans ma tête?

    Merci

  9. #9
    Membre confirmé
    Avatar de mac&cheese
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 98
    Par défaut
    Alors tout dabord, as tu vu mon dernier message?
    Ensuite, effectivement, je n'avais pas compris ton code de cette façon là... apres ton explication, un seul point cloche encore, c'est nboctets, cette variable t'indique seulement une plage d'action; c'est à dire, si nboctets vaut 2, alors, tu devras fixer seulement les 2 premiers elements de ton tableau à la valeur valeur.Pour resumer, seulement les nboctets premiers elements vaudront valeur.

    Mieux?

    Mac & Cheese

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Citation Envoyé par mac&cheese Voir le message
    Pour resumer, seulement les nboctets premiers elements vaudront valeur.
    Ok... donc, si nboctet représente les positions du tableau, ça n'a rien à voir avec le nombre d'octets?

    C'est fou ce que les pointeurs et les casts me mêlent ! lol

  11. #11
    Membre confirmé
    Avatar de mac&cheese
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 98
    Par défaut
    Citation Envoyé par sekiryou Voir le message
    Ok... donc, si nboctet représente les positions du tableau, ça n'a rien à voir avec le nombre d'octets?
    Moi j'aurais appeler cette variable un truc du genre nbDeCasesARemplir...


    Mais encore une fois, c'est ce que moi j'ai compris du texte; c'est à dire que je peux me tromper...

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

Discussions similaires

  1. problème avec un exercice en LDA
    Par djoufouf dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 07/01/2013, 01h31
  2. problème avec un exercice en C
    Par prikama dans le forum Débuter
    Réponses: 8
    Dernier message: 20/12/2011, 15h58
  3. Réponses: 1
    Dernier message: 12/12/2011, 10h42
  4. Réponses: 1
    Dernier message: 24/10/2011, 10h49
  5. [c++] second problème avec exercices du livre Big c++
    Par TERRIBLE dans le forum Contribuez
    Réponses: 6
    Dernier message: 06/11/2005, 21h07

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