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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    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?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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é.

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Par défaut
    Juste une petite précision:
    Ne faut-il pas inclure le fichier en-tête «string.h» pour utiliser «size-t»?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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).

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    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.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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.

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    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].

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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...

+ 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