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 en sortie d'une fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut tableau en sortie d'une fonction
    Bonjour,
    Est-il possible qu'une fonction renvoie un tableau en sortie ?
    voici un exemple que j'aimerai bien faire marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    double complex Ax[N] (int N, double complex A[N][N], double complex x[N])
    {
           int i, j;
           double complex sumAx;
           for (i = 0; i < N; i++){
             sumAx = 0;
             for (j = 0; j < N; j++){
                 sumAx += A[i][j] * x[j];
             }
             Axc[iAx] = sumAx;
           }
           return(Ax);
    D'avance merci

  2. #2
    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
    La déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double complex Ax[N] (int N, double complex A[N][N], double complex x[N])
    n'est pas celle d'une fonction retournant un tableau.

    De toute façon, une fonction ne peut pas retourner un tableau. Elle peut retourner l'adresse du premier élément d'un tableau. Encore faut-il que cette adresse soit valide en sortie de la fonction. Donc ce ne peut pas être l'adresse de début d'un tableau créé en allocation automatique par la fonction (c.a.d comme variable locale à la fonction) puisque les variables locales (en allocation automatique) sont détruites en sortie de fonction.

    Ce peut donc être
    1. - un tableau existant avant l'appel de la fonction et on a alors deux solutions pour que ce tableau soit connu par la fonction
      • - le tableau est une variable en allocation statique : il est donc déclaré comme variable globale ou déclaré static dans la fonction (ces solutions sont à éviter si possible)
      • - l'adresse du début du tableau est passé en argument de la fonction
    2. - un tableau créé par la fonction. Pour assurer sa survie en sortie de la fonction, il doit être en allocation dynamique (malloc(())


    Tu n'as plus qu'à choisir la solution la mieux adaptée à ton problème.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut
    Merci diogene. Peux-tu stp m'expliquer plus comment je dois faire sur l'exemple que j'ai donné (notamment la solution 2) ?

  4. #4
    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
    La solution 2 aurait l'allure suivante :
    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
    double complex * Prod (int N, double complex A[][N], double complex x[])
    {
      int i, j;
      double complex sumAx;
      double complex *Axc = malloc(N*sizeof *Axc); // allocation du tableau
      if(Axc != NULL)  
        for (i = 0; i < N; i++)
        {
          sumAx = 0;
          for (j = 0; j < N; j++) sumAx += A[i][j] * x[j];
          Axc[i] = sumAx;
        }
      return Axc; // retourne l'adresse du début du tableau alloué
    }
    #define N ....
    double complex mat[N][N];
    double complex vect[N];
    double complex *res;
    ......
    res = Prod(N,mat,vect);
    if(res != NULL)
    {
      // utilisation de res.  Eléments : res[i]  ....
      free(res); // destruction de la mémoire allouée
    }

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut
    MERCI diogene, c'est exactement ce que je veux.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 07/05/2006, 11h54
  2. retourné un tableau de valeur d'une fonction
    Par hoaxpunk dans le forum Oracle
    Réponses: 2
    Dernier message: 24/01/2006, 17h36
  3. passage d'un tableau en parametre d'une fonction
    Par ataya dans le forum C++Builder
    Réponses: 10
    Dernier message: 26/10/2005, 13h30
  4. Passer un tableau en parametre dans une fonction js
    Par hellmaster78 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/06/2005, 14h35
  5. tableau javascript ecrit par une fonction asp
    Par LineLe dans le forum ASP
    Réponses: 4
    Dernier message: 03/11/2003, 08h38

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