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 :

taille d' un tableau de int


Sujet :

C

  1. #1
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut taille d' un tableau de int
    j'essaie de faire une fonction qui affiche un tableau de int, dont je connais pas la taille au préalable, j'ai pensé a utiliser size of mais ce ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void affiche(int *tab)
    {
    int i;
    for(i=0;i<(sizeof(tab)/sizeof(tab[i]));i++)
    	printf("%d\n",tab[i]);
    }

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Lors du passage de tab en parametre de ta fonction, tab devient un pointeur vers le premier element du tableau (histoire de ne pas avoir a passer un enorme tableau par copie). sizeof tab donne donc la taille de ce pointeur. Tu n'as alors pas le choix: il faut passer le nombre d'element du tableau en parametre de la fonction.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 lastrecrue
    j'essaie de faire une fonction qui affiche un tableau de int, dont je connais pas la taille au préalable, j'ai pensé a utiliser size of mais ce ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void affiche(int *tab)
    {
    int i;
    for(i=0;i<(sizeof(tab)/sizeof(tab[i]));i++)
    	printf("%d\n",tab[i]);
    }
    A ton avis, à quoi sert le deuxième paramètre de fgets() ?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    En générale ce que je fait, si c'est un tableau alloué dynamiquement, je met toujours le dernier élément à la valeur NULL ce qui me permet d'éviter de passer en argument la taille du tableau !

    Une simple boucle while qui parcours le tableau jusqu'à tomber sur l'élément NULL suffit
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 Franck.H
    En générale ce que je fait, si c'est un tableau alloué dynamiquement, je met toujours le dernier élément à la valeur NULL ce qui me permet d'éviter de passer en argument la taille du tableau !
    Tu fais donc un tableau de pointeurs. Prévoir une place supplémentaire pour la sentinelle.

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu fais donc un tableau de pointeurs. Prévoir une place supplémentaire pour la sentinelle.
    Oui, bon en générale je l'applique surtout à des tableau de tableau sur char mais c'est également valable pour les autres types !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Franck.H
    Oui, bon en générale je l'applique surtout à des tableau de tableau sur char mais c'est également valable pour les autres types !
    Il faut encore qu'il y ait une valeur acceptable pour la sentinelle.

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Il faut encore qu'il y ait une valeur acceptable pour la sentinelle.
    Bin NULL va très bien étant donné que la sentinelle est une zone non allouée ... du moins en générale.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 Franck.H
    Bin NULL va très bien étant donné que la sentinelle est une zone non allouée ... du moins en générale.
    Pour un pointeur, c'est OK. Pour un int, ça va pas le faire...

  10. #10
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    Citation Envoyé par Franck.H
    En générale ce que je fait, si c'est un tableau alloué dynamiquement, je met toujours le dernier élément à la valeur NULL ce qui me permet d'éviter de passer en argument la taille du tableau !

    Une simple boucle while qui parcours le tableau jusqu'à tomber sur l'élément NULL suffit
    ça tombe bien dans mon tableau il n' y a que des 0 et des un.

  11. #11
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    salut
    dans une autre portion du programme j'ai eu le même problème en fait moi j'évite de mètre des string alors que avec sterln() ça serais plus facile je ne veut pas non plus faire des variable globale je pense a faire des transfert par adresse mais ce ne me parait pas logique qu'il n y a pas un autre moyen de résoudre ce problème rien qu'avec la donné du tableau que j'ai.
    NB: tous mes tableau sont allouaient par malloc()

  12. #12
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par lastrecrue
    j'évite de mètre des string
    [TROLL ON]
    Tu fais comme tu veux.
    [TROLL OFF]

    Le type string n'existe pas en C.

    Citation Envoyé par lastrecrue
    alors que avec sterln()
    Cette fonction n'existe pas dans le C standard. Peut être que tu parlais de strlen(), ça prend un char* en entrée.

    Citation Envoyé par lastrecrue
    a faire des transfert par adresse
    De quoi ??? Tu veux peut-être parler de passage de pointeur en paramètre.

  13. #13
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 lastrecrue
    j'ai eu le même problème en fait moi j'évite de mètre des string

    Je comprends !

  14. #14
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    cooooooooooooooool

  15. #15
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    je cherche toujours un moyen pour pouvoir connaitre la taille d'un tableau a partir de sont adresse initial seulement, si il n'y a aucun moyen pour faire ça avec C, je voudrais être sur comme ça j'utilise d'autre moyen, c'est vrais c'est strlen(), quand je parle de string je mélange a avec java, mais je veux dire chaîne de caractère.

  16. #16
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Si tu veux avoir un vrai tableau fonctionnel avec certains opérations comme la taille.

    Tu peux créer une structure du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef
      struct TableauEntier_
     {
       int * tab;
       int taille;
     } TableauEntier;

    Tu définis un constructeur (qui n'oublit pas d'inscrire la taille ds la structure)~:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     TableauEntier* tabEntierCreer(int taille);
    Un destructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      void tabEntierDetruire(TableauEntier* tab);
    Soit tu utilises des opérations dessus du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     int tabEntierLire(TableauEntier* tab, int position) ;
     void tabEntierEcrire(TableauEntier* tab, int position, int element);
     int tabEntierTaille(TableauEntier * tab);
    ou bien tu utilises directement les champs tab et taille.

    Comme ça, plus de pb.

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 lastrecrue
    je cherche toujours un moyen pour pouvoir connaitre la taille d'un tableau a partir de sont adresse initial seulement
    On te l'a déjà dit. Il n'y a aucun moyen naturel. Il faut soit passer un paramètre, soit regrouper les informations dans une structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct_tab_int
    {
       int *a;
       size_t nb_elem;
    };
    et manipuler cette structure.

  18. #18
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 lastrecrue
    je comprend pas, c'est normal que je ne sais pas bien poser les question vue mon niveau en informatique, mais quand je parle de string je parle de char c'est vrais, je m'excuse pour les erreurs.
    y a que ceux qui n'ose pas poser les question qui n'arrive pas a avancé sans pisser
    Humour...

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 18/11/2007, 17h41
  2. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42
  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