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 :

[Débutant(e)]Tableau à plusieurs dimensions non dimensionné.


Sujet :

C

  1. #1
    Membre régulier Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Points : 76
    Points
    76
    Par défaut [Débutant(e)]Tableau à plusieurs dimensions non dimensionné.
    Selon ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    main()
    {
        int i, size;
        char list_ch[][2] = {'1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f'};
        size = &list_ch[5][1] - &list_ch[0][0] + 1;
        size *= sizeof(char);
        printf("Nombre total d'octets: %d.\n", size);
        for (i=0; i<6; i++)
            printf("%c %c\n",
            list_ch[i][0], list_ch[i][1]);
        return 0;
    }
    on obtient la taille du tableau.
    Pour moi il faut déjà connaître la taille du tableau (de sa première dimension) pour écrire ce code sinon pourquoi utiliser le nombre «*5*» dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    size = &list_ch[5][1] - &list_ch[0][0] + 1;
    et pas un autre nombre? Comment savoir que l'adresse «*list_ch[5][1]*» existe?
    Personnellement, j'aurais utilisé la fonction sizeof() avec quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    int main(void)
    {
        int i, size;
        char list_ch[][2] = {'1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f'};
        size = sizeof(list_ch);
        printf("Nombre total d'octets: %d.\n", size);
        printf("Taille de la premiere dimension: %d.\n",
            size/2); /* 2 car la taille de la deuxieme dimension */
        for (i=0; i<size/2; i++) 
            printf("%c %c\n",
            list_ch[i][0], list_ch[i][1]);
        return 0;
    }
    Suis-je dans le vrai ou dans l'erreur?
    Lucky.
    Je ne dors pas longtemps, mais je dors vite.
    [Albert Einstein]

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [Débutant(e)]Tableau à plusieurs dimensions non dimensio
    Citation Envoyé par Lucky-94
    Selon ce code:<...>Suis-je dans le vrai ou dans l'erreur?
    Le premier code est en effet assez mauvais. Le second est meilleur. Ceci devrait lever tes derniers doutes :
    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
    19
     
    #include <stdio.h>
    int main(void)
    {
       char list_ch[][2] = {'1', 'a', '2', 'b', '3', 'c', '4', 'd', '5', 'e', '6', 'f'};
       printf("Nombre total de bytes: %u.\n", (unsigned) sizeof list_ch);
     
       printf("Taille de la deuxieme dimension : %u.\n"
              , (unsigned) sizeof *list_ch);
     
       printf("Taille de la premiere dimension : %u.\n"
              , (unsigned) (sizeof list_ch / sizeof *list_ch));
       {
          size_t i;
          for (i = 0; i < sizeof list_ch / sizeof *list_ch; i++)
             printf("%c %c\n", list_ch[i][0], list_ch[i][1]);
       }
       return 0;
    }
    Aucune hypothèse : tout est calculé.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre régulier Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Points : 76
    Points
    76
    Par défaut
    Juste une petite précision:
    Ne faut-il pas inclure le fichier en-tête «*string.h*» pour utiliser «*size-t*»?
    Lucky.
    Je ne dors pas longtemps, mais je dors vite.
    [Albert Einstein]

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lucky-94
    Ne faut-il pas inclure le fichier en-tête « string.h » pour utiliser « size-t »?
    C'est <string.h>
    C'est size_t
    En fait il faut inclure <stddef.h> (si le compilateur dit ne pas connaître size_t).
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre régulier Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Points : 76
    Points
    76
    Par défaut
    Encore une fois, j'utilise « » à la place de " " comme guillemets.
    En fait, mon compilateur n'a pas poser de problème, mais je pensais que size_t était un type défini dans string.h et pour éviter les problèmes de portage il valait mieux l'inclure.
    Lucky.
    Je ne dors pas longtemps, mais je dors vite.
    [Albert Einstein]

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lucky-94
    Encore une fois, j'utilise « » à la place de " " comme guillemets.
    Encore une fois, c'est pas des guillemets qu'il faut mais des square brackets (<...>). La syntaxe a son importance en C. Les double quotes ("...") ont une autre signification.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre régulier Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Points : 76
    Points
    76
    Par défaut
    C'est dans les messages du Forum que j'utilise les guillemets, sinon si c'est du code (C ou autres) j'utilise les balises [code].
    Lucky.
    Je ne dors pas longtemps, mais je dors vite.
    [Albert Einstein]

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Lucky-94
    C'est dans les messages du Forum que j'utilise les guillemets, sinon si c'est du code (C ou autres) j'utilise les balises [code].
    Pourquoi faire ? Il n'y a aucune raison de modifier la syntaxe du C. C'est déjà assez compliqué comme ça, pas la peine d'ajouter une couche de confusion...
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. Initialisation d'un tableau à plusieurs dimensions
    Par kinouseb dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/02/2007, 13h16
  2. [débutant] un tableau de dimension variable selon l'objet qui le contient
    Par Epistocles dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/01/2007, 18h07
  3. problème avec un tableau à plusieurs dimensions
    Par lelutin dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/09/2006, 12h05
  4. Réponses: 3
    Dernier message: 26/05/2006, 19h49
  5. tableau à plusieurs dimensions
    Par pekka77 dans le forum C
    Réponses: 11
    Dernier message: 07/02/2005, 19h42

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