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 :

trop de pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut trop de pointeur
    Salut tout le monde, j'ai un programme a traduire mais y' a un peut trop de pointeur a mon gou, pourriez vous m'aider a le comprendre??
    Merci d'avance
    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
    36
    37
    38
    void filter_pwv_data(float *X,float *Y,double *mem_1,double *mem_2)
    {
    	float *x,*y;
    	double *m1,*m2;
    	double o,w;
    	long i,j;
    	double *temp_a_coefs,*temp_b_coefs;
     
    	x = X;
    	y = Y;
     
    	for(i=0; i<(ivec_length-1); i++)
    	{
    		m1 = mem_1;
    		m2 = mem_2;
     
    		temp_a_coefs = a_coefs;
    		temp_b_coefs = b_coefs;
     
    		o = *x++ * gain;
     
    		for(j=0; j<numb_quads; j++)
    		{
    			*temp_b_coefs++;
    			w = o - *m1 * *temp_b_coefs++;
    			w = w - *m2 * *temp_b_coefs++;
     
    			*temp_a_coefs++;
    			o = w + *m1 * *temp_a_coefs++;
    			o = o + *m2 * *temp_a_coefs++;
     
    			*m1++ = w;
    		}	*m2++ = *m1;
     
     
    		*y++ = (float)o;
    	}
    }

  2. #2
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut Re: trop de pointeur
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    filter_pwv_data(float *X,float *Y,double *mem_1,double *mem_2)
    Signifie que la fonction modifie ses arguments, en C++, mieux vaut utiliser les références.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    filter_pwv_data(float& X,float& Y,double* mem_1,double* mem_2)
    On assigne à des pointeurs locaux les adresses des argurments X et Y.
    Je pense que c'est un sécurité pour la réentrance de la fonction.

    x et y n'auront plus besoin d'être des pointeurs avec les références.

    Avec les références, la déclaration devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    float x,y;
    double m1,m2;
    double o,w;
    long i,j;
    double *temp_a_coefs, *temp_b_coefs;
    Ici *x++ déréférence le pointeur local x, et le multiplie à gain.
    Avec les références:
    Note, dans le code initial, il y a une imprécision, car ++ est prioritaire sur *, je ne suis pas sûr que le code soit bon.

    l'opérateur ++ est prioritaire sur *, donc on incrémente le pointeur d'un case mémoire. Mais je ne suis pas sûr que c'est ce qui est voulu.

    Information, mem1 et mem2 sont des tableaux.

    w = o -*m1 **temp_b_coefs++;
    Ici, on multiplie le contenu de m1 avec celui de temp_b_coefs, puis on va à la case mémoire suivante.


    Citation Envoyé par Aquadrox
    Salut tout le monde, j'ai un programme a traduire mais y' a un peut trop de pointeur a mon gou, pourriez vous m'aider a le comprendre??
    Merci d'avance
    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
    36
    37
    38
    void filter_pwv_data(float *X,float *Y,double *mem_1,double *mem_2)
    {
    	float *x,*y;
    	double *m1,*m2;
    	double o,w;
    	long i,j;
    	double *temp_a_coefs,*temp_b_coefs;
     
    	x = X;
    	y = Y;
     
    	for(i=0; i<(ivec_length-1); i++)
    	{
    		m1 = mem_1;
    		m2 = mem_2;
     
    		temp_a_coefs = a_coefs;
    		temp_b_coefs = b_coefs;
     
    		o = *x++ * gain;
     
    		for(j=0; j<numb_quads; j++)
    		{
    			*temp_b_coefs++;
    			w = o - *m1 * *temp_b_coefs++;
    			w = w - *m2 * *temp_b_coefs++;
     
    			*temp_a_coefs++;
    			o = w + *m1 * *temp_a_coefs++;
    			o = o + *m2 * *temp_a_coefs++;
     
    			*m1++ = w;
    		}	*m2++ = *m1;
     
     
    		*y++ = (float)o;
    	}
    }

  3. #3
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut Re: trop de pointeur
    Bonjour,
    Citation Envoyé par Aquadrox
    y' a un peut trop de pointeur a mon gou,
    Les pointeurs son des variables comme les autres: http://chgi.developpez.com/pointeur/

    Citation Envoyé par Aquadrox
    Vérifie l'ordre de priorité des opérateurs: http://www-clips.imag.fr/commun/bern...C/node100.html
    Avec ce code, tu mofifie l'adresse pointée par x.

    Citation Envoyé par Aquadrox
    Est ce bien utile :

    Bref l'algo ne semble pas compliquer mais le code oui.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut exact
    Ne vous souciez pas de l'exactitude du code, il est juste et marche tres bien, je m'occupe juste de le translater dans un autre langage, mais bon pour cela il faut le comprendre avant

    Merci pour votre aide je vais me pencher la dessus

  5. #5
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    J'ai été assez clair dans mes explications ou tu es encore dans le flou?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut merci
    C'etait parfait merci!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: trop de pointeur
    Citation Envoyé par Aquadrox
    n'a aucun sens. C'est soit
    soit

  8. #8
    mat.M
    Invité(e)
    Par défaut
    double *temp_a_coefs,*temp_b_coefs;
    comme Emmannuel je ne vois vraiment pas l'intérêt de déclarer des pointeurs
    Totalement inutile et source de plantages si mauvaise gestion

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut ..
    Oui je suis d'accord mais le porgrammes n'est pas de moi, je ne fait que le changer de langage, de mon cote j'evite les pointeur si ce n'est pas necessaire

  10. #10
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Citation Envoyé par mat.M
    double *temp_a_coefs,*temp_b_coefs;
    comme Emmannuel je ne vois vraiment pas l'intérêt de déclarer des pointeurs
    Totalement inutile et source de plantages si mauvaise gestion
    Sauf pour blinder le code par rapport au Multithreading.

  11. #11
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut Re: ..
    Citation Envoyé par Aquadrox
    Oui je suis d'accord mais le porgrammes n'est pas de moi, je ne fait que le changer de langage, de mon cote j'evite les pointeur si ce n'est pas necessaire
    Astuce: Si tu veux enlever les deux dernier pointeurs, qui visiblement sont des "tableaux ouverts" façon C, il te faudra passer par un vector ou un list.

    Ha oui,
    si le développeur initial connassait la préséance des opérateurs signifie:
    sino, comme 90 % des newbies, il a cru coder:
    Je te conseille avant de transformer l'ancien code de le tester pour t'assurer qu'il n'y avait pas de bug. Si tu n'en a pas la possibilité il faut analyser l'algorithme pour savoir si la forme codée est correcte.

    N'hésites pas à demander, je connais bien ces deux langages.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut hehe
    C'etait loin d'etre un newbie c'est un ingenieur en informatique, pour ce qui est du prog il est teste et marche tres bien de A a Z, merci pour ton aide.

    PS: desole j'ai pas d'accent sur le clavier ici et j'ai pas envi de passer ma vie a copier coller des caracteres speciaux...

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut Re: ..
    Citation Envoyé par Caine
    Ha oui,
    si le développeur initial connassait la préséance des opérateurs signifie:
    sino, comme 90 % des newbies, il a cru coder:
    Hum hum, dans le code *x++, la valeur est obtenue AVANT l'incrémentation de x.

    Ce petit programme de démo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    int main(void)
    {
      char *p = "bonjour";
      char *q = p;
     
      char c= *q++;
     
      printf("Valeur de c '%c'\nvaleur de p %p\nvaleur de q %p\n", c, p, q);
      return 0;
    }
    sortie :
    Valeur de c 'b'
    valeur de p 00420054
    valeur de q 00420055
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut merci
    Merci pour ta demo ca eclair tout!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: hehe
    Citation Envoyé par Aquadrox
    C'etait loin d'etre un newbie c'est un ingenieur en informatique,
    Huh! Et il ecrit *x++ comme ça, sans vergogne ? Demande lui ce qu'il a voulu faire, parce que ce n'est pas clair du tout.

    C'est x++ ou (*x)++, ce qui n'a pas du tout la même signification.

    Si tu dois le traduire dans un autre langage, il faut absolument connaitre les intentions du codeur initial, fusse-t-il ingénieur (ça mord pas)....
    pour ce qui est du prog il est teste et marche tres bien de A a Z, merci pour ton aide.
    Alors il faut probablement enlever cette '*' inutile, on y verra plus clair...
    PS: desole j'ai pas d'accent sur le clavier ici et j'ai pas envi de passer ma vie a copier coller des caracteres speciaux...
    Aucune importance. De toutes façons, les accents ne sont pas portables en C

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: ..
    Citation Envoyé par Trap D
    Hum hum, dans le code *x++, la valeur est obtenue AVANT l'incrémentation de x.
    Quelle valeur ? * ne fait rien dans ce cas là :
    C'est pas
    c'est
    tout cours. Relis le code original... ce que je viens de faire... Il s'agit bien sûr de
    car effectivement,
    est à peu près clair (mais je l'écris toujouirs en deux fois pour éviter les ambiguités de relecture de code)

  17. #17
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut Re: hehe
    Citation Envoyé par Emmanuel Delahaye
    C'est x++ ou (*x)++, ce qui n'a pas du tout la même signification.
    *x++ a une signification, c'est la même chose que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i = 0;
    <...>
    x[i];
    <...>
    i++;
    <...>
    Mais dans ce cas, on ne garde pas de trace du pointeur d'origine (x[0])

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 20
    Par défaut Re: hehe
    Citation Envoyé par Emmanuel Delahaye
    Huh! Et il ecrit *x++ comme ça, sans vergogne ? Demande lui ce qu'il a voulu faire, parce que ce n'est pas clair du tout.
    Malheureusement il est parti dans une autre societe sinon c'est lui qui se serai taper le travail!! lol
    Sinon quand il a ecris ca ou bien il a eu un gros coup de chance pour que ca marche ou bien il avait deja essaye avant, le principal etant que ca marche.
    Pour ce qui est de la clarete je te l'accorde ca laisse a desirer...

  19. #19
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut Re: hehe
    Citation Envoyé par gege2061
    Mais dans ce cas, on ne garde pas de trace du pointeur d'origine (x[0])
    Aprés réflexion, c'est peut être pour ça qu'il y a un:
    Comme la valeur du paramètre n'est pas modifier!

  20. #20
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut Re: hehe
    Citation Envoyé par gege2061
    Citation Envoyé par gege2061
    Mais dans ce cas, on ne garde pas de trace du pointeur d'origine (x[0])
    Aprés réflexion, c'est peut être pour ça qu'il y a un:
    Comme la valeur du paramètre n'est pas modifier!
    Exactement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/09/2013, 15h49
  2. pointeur renvoyant un nombre trop grand
    Par christianf dans le forum Débuter
    Réponses: 4
    Dernier message: 29/07/2010, 01h40
  3. le pointeur de ma souris trop sensible
    Par cdevl32 dans le forum Périphériques
    Réponses: 3
    Dernier message: 24/04/2008, 16h00
  4. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 22h43
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44

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