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 :

Pointeur fonction avec argument pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club Avatar de hublott
    Femme Profil pro
    Collégien
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut Pointeur fonction avec argument pointeur
    Salutation,

    J'essais de rentre un code plus lisible (il n'y a qu'une seule fonction int main(void) et ça fait trop).

    Sauf que l'argument de cette fonction est un pointeur et la fonction elle même est de type pointeur.
    Quand j'essais de compiler le code et voici les message d'erreurs:

    invalid operands to binary expression
    ('double' and 'double *')
    f = -k* r + b/pow(r, 5);
    ~~^ ~
    error: passing 'double *' to parameter of incompatible type
    'double'; dereference with *
    f = -k* r + b/pow(r, 5);
    ^
    *
    /usr/include/math.h:443:25: note: passing argument to parameter here
    extern double pow(double, double);
    ^

    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
     
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    #define M 3 // masse du point en kg
    #define k 0.1  // constante kg/sec^2
    #define N 100000   // Nombre d'interation
    #define pi 3.14159
     
     
    double *fonction (double *r) {
        double *f;
        double b= 0.0; 
        f = -k* r + b/pow(r, 5);
        return f;
        }
    Désolée, je ne sais pas si je m'exprime mal, n'hésitez pas à dire vous en pensez..

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Le compilateur te dit tout

    Est-ce que tu sais ce qu'est un déréférencement ? (<- C'est le premier truc qu'on apprend avec les pointeurs)


    En gros lorsque tu codes "k* r" toi tu vois une multiplication, le compilateur voit un déréférencement "*r" et un "k" avant

    Et ensuite la signature de la fonction pow est "(double, double)" et non pas "(double*, double)".

  3. #3
    Futur Membre du Club Avatar de hublott
    Femme Profil pro
    Collégien
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut Déréférencement je sais pas trop
    Merci fœtus.

    Concernant le déférencement, je ne vois pas ce que c'est j'ai pas beaucoup été enseigner sur le code.

    Du coup comment différencier une multiplication d'un pointeur dans ma formule ?

    J'ai modifié mon code comme vous pouvez le vois ci dessous mais j'ai encore un message d'erreur :
    error: assigning to 'double *' from incompatible type 'double'
    f = *r * (-k) + b/pow(*r, 5);
    ^ ~~~~~~~~~~~~~~~~~~~~~~~~

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    double *fonction (double *r) {
        double *f;
        double b= 0.0;
        f = *r * (-k) + b/pow(*r, 5);
        return f;
        }

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Désolé mais renseigne toi sur les pointeurs et la programmation en C.

    En gros "double* r" r est un pointeur vers une valeur double et "*r" on déréférence r pour accéder à cette valeur double

    Et ton code est mauvais parce que qui dit pointeur dit pointeur NULL

    Le vrai code est (non testé, non compilé) (sans codes erreur) :
    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
    size_t fonction (double* r, double* result) {
        size_t ret;
     
        if ((r != NULL) && (result != NULL)) {
            double b = 0.0;
     
            (*result) = -(k * (*r)) + b/ pow((*r), 5);
     
            ret = 1;
        } else {
            ret = 0;
        }
     
        return ret;
    }

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hublott Voir le message
    Concernant le déférencement
    La vraie question devient donc : pourquoi utilises-tu des pointeurs alors que visiblement tu ne les maîtrises pas ? As-tu vraiment besoin de pointeurs pour réaliser ton programme ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Pourquoi fonction retourne-t-elle un pointeur? La multiplication de deux flottants retourne un flottant, et non un pointeur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Futur Membre du Club Avatar de hublott
    Femme Profil pro
    Collégien
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut Réponse à Bktero et Médinoc
    Clairement, je ne maîtrise pas du tout les pointeurs (même pas les bases du C) donc pourquoi, bonne question...

    Je devrais peut-être donner mon code dans sa totalité mais en gros.
    L'une des raisons pour laquelle j'utilise un pointeur c'est que j'utilise une variable plusieurs fois dans le code. Selon le peu que j'ai appris sur les pointeurs il faut mettre un objet en mémoire pour le réutiliser (mettre en mémoire et "le pointer" pour appelé l'objet quoi).

    Sauf qu'en faisant mes recherches je me suis rendu compte que je n'ai peut être pas besoin de pointeur!
    En effet, dans le reste de mon code, j'utilise un tableau et moi, on m'avait "appris" que tableau=pointeur or askip, c'est faux (selon Openclasroom).

    Un tableau se comporte comme un pointeur (c'est-à-dire qu'il place les objets en mémoire) mais que ce n'est pas un pointeur

    I am choked, well je suis une brêle en code comme vous l'auriez remarqué et désolée si je m'exprime mal..

Discussions similaires

  1. problème de fonction avec des pointeurs
    Par bl4cksky dans le forum Débuter
    Réponses: 16
    Dernier message: 09/09/2013, 12h28
  2. fonction avec argument predefini
    Par duplo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/08/2006, 19h06
  3. onChange et fonction avec arguments
    Par pierre.egaud dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2006, 11h02
  4. DLL export de fonction avec argument
    Par slate dans le forum C
    Réponses: 3
    Dernier message: 31/05/2006, 10h36
  5. creer une fonction avec arguments
    Par niglo dans le forum ASP
    Réponses: 3
    Dernier message: 03/06/2005, 08h04

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