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 :

tableau bidimentionnel et fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 19
    Par défaut tableau bidimentionnel et fonction
    Bonjour je me suis fait un petit programme qui initialise un tableau bidimentionnel à une certaine valeur dans une fonction.

    voici le code:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void test(float tab[][3],int a, int n)
    {
    int i,j;
      for(i=0;i<n;i++)
       {
       for(j=0;j<3;j++)
         {
         tab[i][j]=a;
         printf("tab[%d][%d]=%f\n",i,j,tab[i][j]);
         }
       }
    }
     
    main()
    {
    int i, j, n, a;
    n=6;
    a=8;
    /*déclaration dynamique tableau multidimentionnel*/
    float **tab;
    /* Allocation de la 1er dimension */
    tab=(float **)malloc(n*sizeof(float *));
    /* Allocation des tableaux */
    for (i=0; i<n; i++)
    {
       tab[i]=(float *)malloc(3*sizeof(float));
    }
    test(tab, a, n);
    system("PAUSE");
    return 0;
    }
    Ce programme peut sembler bète car pourquoi initialiser le tableau à une valeur dans une fonction et pas dans le main, mais ce n'est qu'un exemple, ce que je souhaite c'est envoyer mon tableau dans une fonction pour effectuer des calculs dessus.
    Le seul problème est que lorsque je compile il me met l'erreur suivante:
    cannot convert `float**' to `float (*)[3]' for argument `1' to `void test(float (*)[3], int, int)' et me souligne la ligne que j'ai placé en gras.
    Je ne sais vraiement pas comment y remédier.
    Merci de m'aider.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    (le #)

    il te faut remplacer les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    float **tab;
    /* Allocation de la 1er dimension */
    tab=(float **)malloc(n*sizeof(float *));
    /* Allocation des tableaux */
    for (i=0; i<n; i++)
    {
    tab[i]=(float *)malloc(3*sizeof(float));
    }
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float *(tab[3]);
    /* Allocation de la 1er dimension */
    tab=(float *[3])malloc(n*sizeof(float[3]));
    PS : si *(tab[3]) ne fonctionne pas, essaie (*tab)[3] mais je pense sincèrement que c'est le premier... le second devant déclarer un tableau de trois pointeurs
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 19
    Par défaut
    Ca ne fonctionne pas il souligne:

    tab=(float *[3])malloc(n*sizeof(float[3]));

    et me dit : cast specifies array type
    ensuite il me souligne:

    test(tab, a, n);

    et me dit : [Warning] passing arg 1 of `test' from incompatible pointer type


  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    les balises code stp...

    dans ce cas, remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab=(float *[3])malloc(n*sizeof(float[3]));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab=(float *)malloc(n*sizeof(float[3]));
    normalement, ça devrait fonctionner...

    Sinon Emmanuel pourra te renseigner mieux que moi (il rode toujours sur le forum )

    pour le second, définie plutôt le premier argument de ta fonction comme ceci je pense que ça devrait passer...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Yop a toi !

    Pense aussi a tester le retour des malloc, si ton malloc plante t'es fichu

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Une remarque:
    et pas la peine de caster le retour de "malloc".

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

Discussions similaires

  1. fonction qui retourne un tableau bidimentionnel
    Par Furious68 dans le forum Débuter
    Réponses: 2
    Dernier message: 11/09/2011, 21h19
  2. Passer le résultat (tableau) d'une fonction
    Par coyote90 dans le forum Access
    Réponses: 3
    Dernier message: 10/11/2005, 19h56
  3. Retourner un tableau depuis une fonction
    Par obalais dans le forum C++
    Réponses: 2
    Dernier message: 20/10/2005, 16h49
  4. xsl-fo : ligne de tableau specifique en fonction d'un test
    Par de LANFRANCHI dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 12/05/2005, 08h24
  5. [LG]tableau infini et fonction longueur
    Par dsr57 dans le forum Langage
    Réponses: 8
    Dernier message: 13/12/2003, 13h54

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