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 :

Connaitre le nombre d'éléments d'un tableau


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut Connaitre le nombre d'éléments d'un tableau
    Bonjour,

    J'aimerais savoir si il y a moyen de connaitre le nombre d'éléments d'un tableau passé en argument d'une fonction ?

    Pour déterminer le nombre d'éléments d'un tableau je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbElt = sizeof(tab) / sizeof(tab[0]);
    mais à l'intérieur d'une fonction sizeof(tab) renvoie visiblement la taille du pointeur.

    Faut-il travailler avec une structure qui intègre systématiquement la taille du tableau; Quelle est la meilleure façon de faire ?

    Merci pour vos réponses éclairées.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par nanosoft Voir le message
    Pour déterminer le nombre d'éléments d'un tableau je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbElt = sizeof(tab) / sizeof(tab[0]);
    mais à l'intérieur d'une fonction sizeof(tab) renvoie visiblement la taille du pointeur.

    Faut-il travailler avec une structure qui intègre systématiquement la taille du tableau; Quelle est la meilleure façon de faire ?
    Effectivement, il faut passer la taille du tableau de façon séparée.

    Cela s'explique par le fait qu'en C, les tableaux ne sont qu'une suite d'éléments du même type réservés consécutivement en mémoire. Ce ne sont pas des objets managés et surtout, il n'y a aucune méta-donnée additionnelle en mémoire pour les décrire, si bien que la place réellement occupée est exactement celle que l'on a déclarée. Ça veut dire que l'exploitation « directe » des tableaux, et notamment la mesure de sa longueur, est réalisé a priori par le compilateur et n'est possible que si le tableau est à portée du bloc qui l'exploite.

    Dans une fonction, on est obligé de passer un pointeur et de l'exploiter de cette façon, non seulement parce qu'il est hors de portée de la fonction en question mais aussi parce qu'au cours de l'exécution, le tableau pointé (en fait passé en argument) peut varier. Il n'est donc pas possible de produire quelque chose de déterministe dès la compilation.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 9
    Points : 27
    Points
    27
    Par défaut
    Comme l'a dit Obsidian, quand tu passes un tableau en paramètre tu ne passes qu'un pointeur vers le premier élément, la fonction n'a aucun moyen de connaitre la taille en se basant sur ça.

    Sachant cela, il y a globalement deux manières de transmettre une information sur la taille d'un tableau à une fonction.
    La première consiste en effet à passer partout la taille avec le tableau en paramètre. Tu peux le faire via une structure (attention à l'accès aux données du tableau), ou en rajoutant un paramètre "taille" a tes fonctions qui en ont besoin.
    La seconde méthode consiste à utiliser une valeur de fin de tableau, comme c'est fait par exemple avec le caractère '\0' de la bibliothèque "string.h". Il faut donc que tu sois sûr que ton tableau ne contiendra pas la valeur de fin. Par exemple, si tu fais un tableau d'entiers positifs, tu peux utiliser un nombre négatif comme valeur de fin. Il faut penser à allouer un tableau d'une case de plus pour contenir cette valeur. Il est ensuite facile de faire une fonction te retournant la taille d'un tableau.

    D'un point de vue "optimisation", cela va dépendre des algorithmes que tu utilises. Mais de toute façon, il y a très peu de chances que ça fasse une différence visible sur ton programme. L'important c'est d'utiliser la méthode qui te convient le mieux, et surtout de t'y tenir pour créer des fonctions uniformes.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    OK, merci bien pour ces réponses claires et précises (et rapides!).

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

Discussions similaires

  1. connaitre le nombre d'enregistrement d'un tableau
    Par tribaleur dans le forum ASP
    Réponses: 4
    Dernier message: 06/06/2006, 12h41
  2. Réponses: 2
    Dernier message: 05/05/2006, 08h55
  3. [VBA-E] connaitre le nombre de ligne dans un tableau excel
    Par bigbarbe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/04/2006, 10h03
  4. Nombre d'élément d'un tableau
    Par barok dans le forum Flash
    Réponses: 3
    Dernier message: 10/10/2005, 20h02
  5. Compter le nombre d'élément dans un tableau
    Par cryptorchild dans le forum Langage
    Réponses: 6
    Dernier message: 08/07/2005, 13h01

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