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

MFC Discussion :

Longueur d'un tableau


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Points : 83
    Points
    83
    Par défaut Longueur d'un tableau
    Bonjour,
    J'aimerai savoir comment déterminer la longueur d'un tableau dans une fonction qui prend en entrée un pointeur sur celui-ci (je pense bien m'exprimer mais peut être est ce que je me trompe). Voici la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    static void Mat_add (double *pEntree1, double *pEntree2, double *pSortie)
    {	
    	unsigned int i, j;
    	for (i = 0; i <= (sizeof(pEntree1)); i++)
    	{
    		pSortie[i] = pEntree1[i];
    	}
    	for (j = i; j <= (sizeof(pEntree2) + i) ; j++)
    	{
    		pSortie[j] = pEntree2[j - i];
    	}
    	printf("%d\n",sizeof(pEntree1));
    }
    L'erreur est que sizeof(pEntree1) ne me retourne pas la longueur du tableau mais du type double à ce que je comprend, comment obtenir la longueur du tableau pEntree1[]?
    Je remercie grandement celui qui me répondra.

  2. #2
    Membre habitué

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Points : 171
    Points
    171
    Par défaut
    Salut,

    je suis desole, mais il n'y a pas de chance. Il faut reverser aussi les longueur des tableaux.

    Fredy

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Points : 83
    Points
    83
    Par défaut
    C la merde le C, faut tout faire!

  4. #4
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par petdelascar
    C la merde le C, faut tout faire!
    Alors passe au C++ et utilise la classe std::vector (tout est fait).

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Points : 165
    Points
    165
    Par défaut
    Salut,

    Il n’est pas nécessaire de créer un pointeur sur un tableau en paramètre, le nom du tableau en argument suffit. Un pointeur est automatiquement créé. Sinon pour connaître ça taille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int nElement = Sizeof( MonTab ) / sizeof ( MonTab[0] )

  7. #7
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    L'erreur est que sizeof(pEntree1) ne me retourne pas la longueur du tableau mais du type double à ce que je comprend,
    Pas du tout, il te renvoie la taille d'un pointeur!
    comment obtenir la longueur du tableau pEntree1[]?
    C'est très simple, tu ne peux pas à moins de la passer en paramètre à la fonction. pEntree1 est un pointeur local à la fonction initialisé par l'adresse du premier élément du tableau.
    Je remercie grandement celui qui me répondra
    Alors, remercie moi

    petdelascar :
    C la merde le C, faut tout faire!
    Alors, il faut choisir un autre langage
    jmv :
    Alors passe au C++ et utilise la classe std::vector (tout est fait).
    Ou essaye de comprendre comment les choses fonctionnent.

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Citation Envoyé par LDDL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int nElement = sizeof( MonTab ) / sizeof ( MonTab[0] )
    Qui n'est valable que pour les tableaux statiques. Je précise des fois que.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Un autre moyen pour passer un tableau et sans sa taille et la calculer ensuite, c'est le terminer par. une valeur sentinelle (ex: un nombre négatif si tous sont supposés être positifs, etc.
    Malheureusement, quand on utilise des valeurs non entières, on peut difficilement choisir UNE valeur précise à laquelle comparer chaque élément...

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    encore plus simple c'est de reserver en fin de tableau de pointeur un pointeur null .
    il suffit alors d'iterer tant que le pointeur n'est pas null.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static void Mat_add (double *pEntree1, double *pEntree2, double *pSortie)
    {   
       unsigned int i, j;
       for (i = 0; pEntree1[i]; i++)
       {
          pSortie[i] = pEntree1[i];
       }
       for (j = i; pEntree2[j] ; j++)
       {
          pSortie[j] = pEntree2[j - i];
       }
    //   printf("%d\n",sizeof(pEntree1));
    }
    les tableaux de pointeur sur double devront avoir le dernier element initialisé a NULL.

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    sauf aue là, 1°) tu copies les pointeurs
    2°) tu as oublié de déclarer les tableaux en tableaux de pointeurs (double **)

  12. #12
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par petdelascar
    C la merde le C, faut tout faire!
    hihi, le pire c'est de vouloir faire du C/C++ quand on sort du pascal, car si on arrive au point où on veut faire un tableau de pointeur pouvant chacun être NULL, ça se complique sérieusement ...

Discussions similaires

  1. Longueur d'un tableau en VB
    Par The_Beast dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/08/2008, 12h19
  2. Length : longueur d'un tableau dans pointeur de record
    Par sendibacori dans le forum Ada
    Réponses: 8
    Dernier message: 25/12/2007, 19h55
  3. Réponses: 4
    Dernier message: 04/02/2007, 00h06
  4. Longueur d'un tableau en VB6
    Par ssakhri dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/12/2006, 12h51
  5. [debutant] Connaitre la longueur d'un tableau.
    Par parp1 dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2006, 18h32

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