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 :

Initialiser un tableau de taille variable à sa création


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut Initialiser un tableau de taille variable à sa création
    Bonjour à tous.

    Das le projet sur lequel je travaille, je dois initializer les valeurs d'un tableau, et je souhaite le faire à la compilation du programme. Cependant, la taille du tableau est défini (via #define) dans un autre fichier header. Et donc il peut changer à tout moment, selon le projet.
    Je souhaite donc faire mon code le plus générique possible, afin d'éviter de revenir le refaire à chaque fois que la taille du tableau change.

    Ce que je faisais avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int tmpArray[SIZE] = {[0 ... (SIZE-1) = 10};
    Et ceci fonctionne bien, tant que je dois donner à tous les éléments du tableau la même valeur.

    Je peux aussi utiliser des fonctions, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int tmpArray[SIZE] = {[0 ... (SIZE-1) = pow(10,10)};
    Mais de nouveau, tous les valeurs du tableau sont les mêmes.

    Je souhaite donner des valeurs différentes au tableau, en suivant le format :
    1, 11, 101, 1001, ...
    Autrement dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1, pow(10, 1)+1, pow(10, 2)+1, ..., pow(10, SIZE-1)+1
    Mais je n'ai pas encore trouvé de moyen pour faire ceci. Je ne peux pas utiliser de 'for' ou 'while' dans l'initialisation du tableau (du moins, je n'ai pas encore trouvé de moyen), et je n'ai pas trouvé s'il y a un variable de boucle interne que je pourrais utiliser.

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i=0;
    int tmparray[SIZE] = {[0 ... (SIZE-1)] = pow(10, i++)};
    Mais ça n'a pas fonctionne comme je le voulais, puisqu'il a assigné la valeur de 'pow(10, 0)', c'est-à-dire 1, à tous les éléments du tableau, avant d'incrémenter la valeur de 'i' à 1.

    Ainsi, je souhaite savoir s'il y a moyen d'initialiser la valeur du tableau, dont on ignore la taille mais qu'on connait la logique des valeurs, au moment de sa création.

    Merci beaucoup de toute aide, cela est fort apprécié.

    Mad Ant

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    est-ce réellement possible "d'initialiser un tableau à la compilation" ?
    Ca me semble difficile, le préprocessor ne fera que remplacer les defines, et à chaque exécution du programme, même s'il s'agit d'un tableau statique, l'os devra lui réassigner son adresse.
    Pourquoi ne pas faire un simple for à l'initialisation du programme ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int i;
    tab[0] = 1;
    for (i = 1; i < SIZE; ++i)
       tab[i] = pow(10, i) +1;
    Sinon, pour initialiser une valeur unique, tu peux aussi utiliser memset
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut
    Bonjour Bousk, merci de ta réponse.

    C'est probablement dans ce sens que je vais y aller.

    En réalité, je voulais prendre des tableau pour remplacer une série de #define déjà existants, et d'y ajouter des nouvelles, et initialiser les valeurs dès la compilation. Et de prévoir qu'en cas de changement de valeur de SIZE, dans l'avenir, de ne pas devoir toucher au reste du code.
    Mais il semblerai qu'il n'y a pas de possibilités permettant de les définir selon des calculs à l'initialisation, seulement de mettre la même valeur pour tous les indices du tableau.Merci tout de même.
    A+

    Mad Ant

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Ce que tu cherche a faire est illégal. Tu ne dois absolument pas initialiser un tableau statique avec un valeur variable, car si ta valeur est TRES grande tu va faire exploser la stack et ton programme plantera.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 16
    Par défaut
    Je me suis dit que si on pouvais utiliser des fonctions dans l'élément d'initialisation (du style pow(...), par exemple), que ce serai peut être possible d'utiliser des éléments de logique, comme des boucles. Mais cela est effectivement impossible. Ou, du moins, je n'ai pas trouvé comment faire.

    J'avais uniquement utilisé pow(...) comme example. Sauf valeur extrême, nécessitant de toute manière la ré-écriture complète des fonctions, les valeurs contenues par le tableau ne dépasseront pas la valeur maximal du type de tableau.
    Certains tableau sont des pour un masquage de bits (donc valeurs \x01, \x02, \x04, ...), d'autres de simples incrémentations (1, 2, 3, ...) ou autres suites algébriques.

    Mais il semble effectivement impossible. Dommage.

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

Discussions similaires

  1. sommes des cases d'un tableau de taille variable
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2008, 00h18
  2. Sélectionner tableau a taille variable
    Par Iloon dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/02/2008, 16h20
  3. [Conception] tableau de taille variable
    Par salirose dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 21/10/2006, 13h53
  4. Réponses: 1
    Dernier message: 14/09/2006, 10h53
  5. [TP] Tableau de taille variable
    Par Ripley dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 30/01/2006, 15h36

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