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 :

Optenir la taille d'un tableau pointé


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut Optenir la taille d'un tableau pointé
    J'arrive pas a obtenir la taille réelle de mon tableau...

    code appelant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int *data = remplirTableau();
    int z;
    for(z = 0; z < (sizeof (*data) / sizeof(int)); z++){
    		printf("seq: %d",data[z]);
    }
    code de la fonction qui remplis le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int* remplirTableau(){
     
     
    int *data;
    data = (int *) malloc (sizeof(int) * 10); 
    data[0] = 10;
    data[1] = 9;
    data[2] = 8;
    ...
     
    return data;
     
    }
    Il ne boucle qu'une seule fois sur mon tableau comme si il y avait juste un élément, pourquoi?

    Merci!

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par dimethroxy Voir le message
    Il ne boucle qu'une seule fois sur mon tableau comme si il y avait juste un élément, pourquoi?

    Merci!
    Ce que tu veux faire n'est pas possible en C, pour la simple raison que seuls les éléments sont alloués lors de la déclaration d'un tableau. Sa taille en elle-même n'est stockée nulle part. D'ailleurs, tu aurais du t'en rendre compte puisqu'en utilisant malloc(), tu alloues exactement la place pour dix int et rien de plus.

    Lorsque tu fais « * data », tu déréférences le pointeur, c'est-à-dire que tu te réfères à ce qu'il pointe. Et comme ton pointeur pointe le premier élément de ton tableau, tu obtiens la taille de cet élément.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Par défaut
    Salut,

    Il me semble que le seul moyen pour obtenir la taille d'un tableau est d'utilisé un élément sentinel à la fin de celui ci.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    En général on se contente plutôt d'enregistrer la taille du tableau quelque part (dans une variable, dans un champs d'une structure, voire avec un #define).

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    En plus de la remarque faite par Obsidian sur *data (qui est un int) , il faut noter que sizeof data / sizeof *data ne donnera pas plus le nombre d'éléments du tableau, puisque data est un int *. Ceci est alors équivalent à sizeof (int*)/ sizeof (int).

    Le seul moyen pour une fonction de connaître le nombre d'éléments d'un tableau créé ailleurs est de passer cette valeur à la fonction (ou d'avoir un élément sentinelle comme dans le cas des chaînes de caractères)

    C'est ici que le nombre d'éléments devrait être défini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      int *data = remplirTableau(nbElements);
      int z;
      for(z = 0; z < nbElements; z++){
    		printf("seq: %d",data[z]);
     
     ....
    int* remplirTableau(int nombre){
      int *data= malloc (sizeof(int) * nombre);
      if(data!= NULL)
    ...

Discussions similaires

  1. Taille d'un tableau pointé dans un tableau
    Par jacklafrip dans le forum C
    Réponses: 12
    Dernier message: 08/08/2012, 16h10
  2. Changer la taille d'un tableau déjà initialisé
    Par totofweb dans le forum C++
    Réponses: 2
    Dernier message: 25/07/2004, 15h55
  3. taille d'un tableau
    Par monstour dans le forum ASP
    Réponses: 3
    Dernier message: 24/06/2004, 15h16
  4. Taille maximum de tableau en Delphi
    Par yannick37 dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2004, 13h18
  5. qbasic : taille d'un tableau
    Par clood200 dans le forum Basic
    Réponses: 2
    Dernier message: 16/09/2003, 07h26

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