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 :

Fonction renvoyant un Float* ?


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut Fonction renvoyant un Float* ?
    Bonjour a tous !
    J'aurais voulu savoir s'il etait possible pour une fonction de renvoyer un pointeur float, qui n'en en fait autre qu'un tableau de float.

    c-a-d, est-ce qu'une declaration du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float *ma_fonction(mes parametres)
    est correcte en C ?

    Car je voudrais manipuler un tableau de float temporairement dans ma fonction et ne renvoyer en sortie qu'un pointeur vers celui-ci

  2. #2
    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 : 38
    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
    Points : 3 958
    Points
    3 958
    Par défaut
    Pas possible à moins de déclarer le tableau dynamiquement.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Ok je vais faire autrement alors, mais je trouve dommage que ca soit impossible

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    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
     
    #include <stdlib.h>
     
    float *mafonction(void)
    {
        float *tab = NULL;
        tab = malloc(10*sizeof(float));
        if(tab == NULL) exit(EXIT_FAILURE);
        return tab;
    }
     
    int main(void)
    {
        float *tab = NULL;
        tab = mafonction();
        tab[0] = 0.;
        [...];
        free(tab), tab = NULL;
        return 0;
    }

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Oui ok je vois.
    Mais je voulais eviter l'allocation dynamique d'un nouveau tableau.
    Je vais plutot modifier dans ma fonction un tableau predeclare et alloue.
    Merci !

  6. #6
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Mais je voulais eviter l'allocation dynamique d'un nouveau tableau.
    Si tu connais sa taille, tu peux le déclarer en static.

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Mayti4
    Si tu connais sa taille, tu peux le déclarer en static.
    Oui mais dans ce cas tu ne peux pas le retourner.

    Tu parle peux être de déclarer le tableau avec le mon clé static, dans ce cas le tableau n'est pas détruit à la sortie de la fonction mais j'essairai même pas de faire retourner son adresse par une fonction

  8. #8
    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 : 38
    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
    Points : 3 958
    Points
    3 958
    Par défaut
    Tu parle peux être de déclarer le tableau avec le mon clé static, dans ce cas le tableau n'est pas détruit à la sortie de la fonction mais j'essairai même pas de faire retourner son adresse par une fonction
    Justement quelle est la différence entre un tableau "static" et dynamique quand il est retourné par la fonction?
    Y a t'il réellement comportement indéterminé?


  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Justement, non. Un tableau déclaré en variable locale statique peut être retourné par adresse sans problème: Il n'est pas effacé lorsque la fonction quitte.

    Par contre, cela pose les mêmes problèmes que les variables globales, sauf celui de l'accès depuis n'importe quel source (mais les autres problèmes, comme la non-réentrance et la non-thread-safeness, sont toujours présents).

  10. #10
    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 : 38
    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
    Points : 3 958
    Points
    3 958
    Par défaut
    C'est bon à savoir, merci.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gege2061
    Oui mais dans ce cas tu ne peux pas le retourner.
    Pourquoi ? Comment crois-tu que ctime() fonctionne ?

    Il y a d'autres problèmes, mais pas celui-là.

  12. #12
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par gege2061
    Oui mais dans ce cas tu ne peux pas le retourner.
    Pourquoi ? Comment crois-tu que ctime() fonctionne ?
    Je paralais d'une variable en mémoire statique (concernant le mot clés static, c'est en dessous).

    ctime fonctionne bizzarement : http://swtch.com/usr/local/plan9/src/lib9/ctime.c.

    Si j'ai bien suivi c'est encore pire que non thread-safe puisqu'à chaque appel de la fonction, on perd la valeur précédente (on réécri toujours à la même adresse, celle de cbuf)

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tout comme pour une variable globale.

    Je paralais d'une variable en mémoire statique (concernant le mot clés static, c'est en dessous).
    ??? Elle est où, la différence ?

  14. #14
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Médinoc
    ??? Elle est où, la différence ?
    Bah c'est pas dynamique

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    ben, ça ne l'est dans aucun des deux cas!
    Je répète: Où est la différence ?

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gege2061
    Je paralais d'une variable en mémoire statique (concernant le mot clés static, c'est en dessous).

    ctime fonctionne bizzarement : http://swtch.com/usr/local/plan9/src/lib9/ctime.c.

    Si j'ai bien suivi c'est encore pire que non thread-safe puisqu'à chaque appel de la fonction, on perd la valeur précédente (on réécri toujours à la même adresse, celle de cbuf)
    Il n'y a rien de bizarre. C'est simplement un exemple parmi d'autre de fonction C standard à l'interface mal conçu qui induit une implémentation à coup de variable statique et donc un comportement déplorable. Heureusement, strftime() corrige le tir.

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 08/01/2010, 16h15
  2. Fonction renvoyant char*
    Par Azharis dans le forum C++
    Réponses: 4
    Dernier message: 28/12/2005, 15h33
  3. Fonction renvoyant 0 ou 1
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/10/2005, 10h56
  4. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33
  5. fonction renvoyant un tableau en argument
    Par Jones dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2002, 18h20

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