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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 47
    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 : 47
    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 -
                            -----

  6. #6
    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?

  7. #7
    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 : 47
    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...

  8. #8
    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++ ?

  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
    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?

  11. #11
    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 : 47
    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.

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