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 :

Créer des variables dynamiques


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut Créer des variables dynamiques
    Bonjour. Je suis un petit nouveau sur le forum J'espère passer de bons moments avec vous amis développeurs

    Je vous expose mon problème : je souhaite créer une fonction qui permet de créer de façon dynamique des variables (par exemple des int), de leur donner un nom et une valeur. Par exemple essayons de créer a=5, b=6 et c=7. Est-ce que le code suivant est correct?

    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
    #include<stdio.h>
    #include<stdlib.h>
     
    void creerint(int *ptr2)
    {
    printf("Nom de la variable?");
    scanf("%s", ptr2);
    printf("Valeur de la variable créée?");
    scanf("%d", *ptr2);
    }
     
    main()
    {
    int *ptr1=NULL;
    ptr1=malloc(sizeof(int));
    creerint(ptr1);
    }
    Remarque : je voudrais utiliser un malloc et non pas un new comme vous allez certainement me le conseiller ;-)
    Par avance merci de votre réponse.

  2. #2
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Bonjour, et bienvenue sur les forums !



    Ce n'est pas encore très au point, les pointeurs
    Dans ta fonction creerint, le nom de la variable est ptr2, sa valeur est l'adresse du bloc alloué par malloc dans le main.

    La valeur contenue dans le bloc pointé par ptr2 (et donc alloué par malloc), est accessible par *ptr2.
    Pour l'utiliser avec scanf (fonction dont l'utilisation est, par ailleurs, déconseillée), il te faut utiliser l'adresse du bloc où tu veux placer la valeur saisie, c'est-à-dire &(*ptr2), ou plus simplement ptr2 !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Tout d'abord merci de ta réponse et de ton accueil chaleureux Sinon effectivement, j'ai encore quelques difficultés avec les pointeurs... lol
    Ce qui me pose vraiment problème dans cette fonction en fait c'est comment nommer la variable pointée par ptr2? Si je fais *ptr2, je modifie sa valeur, mais pour dire qu'elle s'appelle a, comment s'y prend-on?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    J'ai peut-être compris Pour dire que la variable s'appelle a, il faut écrire
    et pour affecter 5 à a il faut écrire
    C'est ça?

  5. #5
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Sagouin64
    Tout d'abord merci de ta réponse et de ton accueil chaleureux Sinon effectivement, j'ai encore quelques difficultés avec les pointeurs... lol
    Ce qui me pose vraiment problème dans cette fonction en fait c'est comment nommer la variable pointée par ptr2? Si je fais *ptr2, je modifie sa valeur, mais pour dire qu'elle s'appelle a, comment s'y prend-on?
    ptr2 est une variable de type pointeur sur int. Son nom est ptr2, et ne peut pas être modifié. Son contenu est une adresse. L'endroit en mémoire pointé par cette adresse n'a pas de nom.

    Tu peux utiliser le code suivant si tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int a = 0;
    int* ptr2 = &a;
    ici, ptr2 est un pointeur sur int, qui contient l'adresse de la variable a (donc l'adresse d'un bloc nommé a).

    Je ne suis pas sûr de bien comprendre ce que tu veux faire...

  6. #6
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Sagouin64
    C'est ça?
    Non.

    Citation Envoyé par Sagouin64
    Pour dire que la variable s'appelle a, il faut écrire
    Non, là tu modifies la valeur du bloc pointé par ptr2.

    Citation Envoyé par Sagouin64
    et pour affecter 5 à a il faut écrire
    Et là, tu modifies l'adresse contenue dans ptr2.

    Je ne suis pas très bon en dessin , mais bon, essayons :
    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
    int* ptr2;
    ptr2 -----
         -   -
         -----
    
    ptr2 = malloc(...);
    ptr2 -----
         - X==============> -----
         -----              -   -
                            -----
    
    *ptr2 = 5;
    ptr2 -----
         - X==============> -----
         -----              - 5 -
                            -----

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    C'est un exercice, ou bien tu te compliques l'apprentissage avec des notions inutiles à ce stade et en évitant les syntaxes C++ ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Ce que je veux faire est assez simple : créer un entier de façon dynamique.
    En fait je voudrais que mon programme fasse ceci :

    Nom de l'entier? a (rentré par l'utilisateur)
    Valeur de "entier créé(=a)"? 5 (rentré par l'utilisateur)

    Tu vois je ne veux pas définir au départ int a; Je veux que ce soit l'utilisateur qu rentre le nom de l'entier, et sa valeur. Et je voudrais faire ça de façon générique à l'aide de ma fonction creerint.

    Tu me suis?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Citation Envoyé par Laurent Gomila
    C'est un exercice, ou bien tu te compliques l'apprentissage avec des notions inutiles à ce stade et en évitant les syntaxes C++ ?
    C'est un exercice trouvé sur un site.

  10. #10
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Sagouin64
    Ce que je veux faire est assez simple : créer un entier de façon dynamique.
    En fait je voudrais que mon programme fasse ceci :

    Nom de l'entier? a (rentré par l'utilisateur)
    Valeur de "entier créé(=a)"? 5 (rentré par l'utilisateur)

    Tu vois je ne veux pas définir au départ int a; Je veux que ce soit l'utilisateur qu rentre le nom de l'entier, et sa valeur. Et je voudrais faire ça de façon générique à l'aide de ma fonction creerint.

    Tu me suis?
    Ah oui, alors il faut utiliser une variable pour contenir le nom de l'entier, et une autre pour sa valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char nom_entier[11] = {0};
    int valeur_entier = 0;
     
    printf("Nom de l'entier (10 car. maxi): ");
    cin.getline (nom_entier, 10, '\n');
     
    printf("Valeur de l'entier %s : ", nom_entier);
    cin >> valeur_entier;
    N'étant pas vraiment spécialiste du C++, je ne garantis pas que mon code soit correct.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Citation Envoyé par zooro
    Non.


    Non, là tu modifies la valeur du bloc pointé par ptr2.


    Et là, tu modifies l'adresse contenue dans ptr2.

    Je ne suis pas très bon en dessin , mais bon, essayons :
    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
    int* ptr2;
    ptr2 -----
         -   -
         -----
    
    ptr2 = malloc(...);
    ptr2 -----
         - X==============> -----
         -----              -   -
                            -----
    
    *ptr2 = 5;
    ptr2 -----
         - X==============> -----
         -----              - 5 -
                            -----

    Je te suis jusque là. Mais comment dire que la variable int qui contient 5 s'appelle a?

  12. #12
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Sagouin64
    Je te suis jusque là. Mais comment dire que la variable int qui contient 5 s'appelle a?
    Ca ne présente aucun intérêt pour l'ordinateur de savoir comment s'appelle la zone allouée dynamiquement.
    Ce que tu veux, je pense, est d'associer un nom à l'entier pour aider l'utilisateur de ton programme à s'y retrouver. Dans ce cas, comme dit dans le post précédent, il faut deux variables (une pour le nom, et une pour la valeur de l'entier).

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Citation Envoyé par zooro
    Ca ne présente aucun intérêt pour l'ordinateur de savoir comment s'appelle la zone allouée dynamiquement.
    Ce que tu veux, je pense, est d'associer un nom à l'entier pour aider l'utilisateur de ton programme à s'y retrouver. Dans ce cas, comme dit dans le post précédent, il faut deux variables (une pour le nom, et une pour la valeur de l'entier).
    C'est ça oui. Je vais voir si je peux me débrouiller avec ta solution. Merci

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par Sagouin64
    C'est un exercice trouvé sur un site.
    Je ne sais pas de quel site il s'agit, mais vu l'exercice je te le déconseille vraiment
    De plus c'est du C, pas du C++.

  15. #15
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    La seule application utile de ce que tu cherches à faire et que je vois, et bien ce n'est pas possible en C++ de définir de nouvelles variables à la volée durant l'exécution.
    Orientes-toi vers des tableaux (=> identification par numéro et non par nom) ou des tables associatives (comme les std::map).

    (C'est vraiment obligé les sscanf ?)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Citation Envoyé par Luc Hermitte
    La seule application utile de ce que tu cherches à faire et que je vois, et bien ce n'est pas possible en C++ de définir de nouvelles variables à la volée durant l'exécution.
    Orientes-toi vers des tableaux (=> identification par numéro et non par nom) ou des tables associatives (comme les std::map).

    (C'est vraiment obligé les sscanf ?)

    Ok merci. Mais avec les tableaux je vais pas y arriver. Pas encore le niveau pour faire ça

  17. #17
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Ce type de mécanisme est appelé en anglais reflection. C'est possible en Smalltalk et en Common Lisp, et il est possible de le faire en Java et en Python. Mais je ne sais rien à ce sujet en ce qui concerne C++.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  18. #18
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    C'est aussi possible en php, où on peut aussi appeler des variables

  19. #19
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    La bibliothèque Reflex, écrite par une équipe du CERN, essaie d'apporter des capacités de réflection au langage C++. Je n'ai pas étudié plus en avant mais voici la référence du site: http://seal-reflex.web.cern.ch/seal-reflex/index.html

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  20. #20
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Rien à voir avec la réflexion.

Discussions similaires

  1. Procédure Stockée pour créer des TABLE dynamiquement
    Par GuyverZ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/05/2009, 22h29
  2. Créer des variables avec un nom dynamique
    Par midoparis dans le forum C#
    Réponses: 7
    Dernier message: 22/01/2009, 14h17
  3. créer des variables javascript dynamiquement dans un code php
    Par lau_the_raptor dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/07/2007, 12h10
  4. Créer des variables de classe dynamiquement
    Par Sebastien13 dans le forum Langage
    Réponses: 1
    Dernier message: 13/02/2007, 22h00
  5. Créer des variables
    Par Thundie dans le forum Général Python
    Réponses: 6
    Dernier message: 03/02/2006, 17h49

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