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 :

Initialisation d'un tableau dynamique


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Initialisation d'un tableau dynamique
    Bonjour,

    Je débute un peu en C et je suis tombé sur un petit problème dans mon programme de Sudoku : comment initialiser un tableau dynamique multidimensionnel de manière efficace avec des chiffres précis ?

    Pour l'instant, j'initialise d'abord avec des 0 par l'intermédiaire de calloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pointeurSudoku = malloc(9 * sizeof(*pointeurSudoku));
    for(i=0 ; i <= 8 ; i++){
    	pointeurSudoku[i] = calloc(9, sizeof(**pointeurSudoku));
    }
    et j'écris salement chaque chiffre un à un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pointeurSudoku[0][2] = 3;
    pointeurSudoku[0][3] = 6;
    pointeurSudoku[0][7] = 9;
    //etc.
    Est-ce possible d'initialiser ligne par ligne avec des "suites de chiffres" du genre :
    Ou carrément tout le tableau d'un coup, comme on peut le faire lors d'une définition "statique" ?

    Merci d'avance !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Tu peux faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaStructure * p = malloc(sizeof(MaStruture));
    MaStructure static_data = { ... };
    memcpy(p, &static_data, sizeof(static_data));
    Par contre, je me dis que si tu fait un alloc pour avoir un tableau dynamique et que tu l'initialise avec un tableau statique (quelle que soit la méthode, code en dur ou bien données en dur), tu n'as peut être pas besoin de tableau dynamique.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ok après adaptation à mon code, ça marche comme sur des roulettes. Merci beaucoup ! J'ai juste eu besoin de rajouter la librairie string.h et de faire un peu attention car je suis en 2D.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int static_data[9] = {...};
    memcpy (pointeurSudoku[1], &static_data, sizeof(static_data));
    L'intérêt que je voie dans cette allocation dynamique est la possibilité de définir le tableau dans une fonction car j'ai cru comprendre que ce n'était pas possible de le faire avec une définition statique et donc locale...

    Y a-t-il une manière plus simple de faire ça ?

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2011, 10h41
  2. initialisation tableau dynamique
    Par mikew75 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/11/2008, 13h06
  3. Réponses: 18
    Dernier message: 02/04/2008, 04h11
  4. [Tableau] Initialisation d'un tableau dynamique
    Par Rayek dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2007, 08h24
  5. Initialisation tableau dynamique
    Par exyacc dans le forum Delphi
    Réponses: 16
    Dernier message: 18/06/2007, 11h57

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