manouchk
la vache!
Messages : 1 844 Inscrit le 25/12/02
Ville : Vitória (ES) Brésil
Non connecté
|
|
Posté le 21 juin 2005 - 17 h 16 m 11 s |
|
|
Bonjour,
j'ai une petite question "pointeurs" en c.
Dnas le code que j'ai mis plus bas je ne comprends pas éxactement ce que veut dire la ligne de déclaration suivante :
1. double alpha = *(double *) params;
Je comprends pas le " *(double *)"
Est-ce un pointeur de type pointeur de double??
(ou autrement dit un pointeur de type void pointant vers un pointeur de type double??)
merci pour votre aide!
1.
2. #include <stdio.h>
3. #include <math.h>
4. #include <gsl/gsl_integration.h>
5.
6. /*
7. The integrator QAGS will handle a large class of definite integrals. For example, consider the following integral, which has a algebraic-logarithmic singularity at the origin,
8.
9. \int_0^1 a*x^{-1/2} log(x) dx = -a*4
10.
11. The program below computes this integral to a relative accuracy bound of 1e-7.
12. */
13.
14. double f (double x, void * params) {
15. double alpha = *(double *) params;
16. double f = log(alpha*x) / sqrt(x);
17. return f;
18. }
19.
20. //double_int_f()
21.
22. int
23. main (void)
24. {
25. gsl_integration_workspace * w
26. = gsl_integration_workspace_alloc (1000);
27.
28. double result, error;
29. double expected = -4.0;
30. double alpha = 1.0;
31.
32. gsl_function F;
33. F.function = &f;
34. F.params = alpha
35.
36. gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000,
37. w, &result, &error);
38.
39. printf ("result = % .18f\n", result);
40. printf ("exact result = % .18f\n", expected);
41. printf ("estimated error = % .18f\n", error);
42. printf ("actual error = % .18f\n", result - expected);
43. printf ("intervals = %d\n", w->size);
44.
45. return 0;
46. }
47.
si vous avez un lien pour décrire différents cas de pointeurs... ou des bons livres (en Anglais aussi car présentement je ne suis plus en France)
Merci d'avance!
|
|
| |
Message édité 3 fois, la dernière par manouchk le 21 juin 2005 - 19 h 51. |
| |
"Je ne suis pas chauvine mais la France est quand même la reine des fromages." Brigitte Fontaine chantant dans l'Europe de l'album "Des Visages Des Figures" de Noir Désir
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 21 juin 2005 - 17 h 35 m 00 s |
|
|
Pour la ligne, c'est assez simple :
le (double *) convertit params, qui est un void *, en pointeur vers un double ; le * qui précède les parenthèses déréférence le pointeur, et te permet ainsi de récupérer la valeur point flottant de params.
edit : au passage, je ne vois pas bien l'intérêt de déclarer ce paramètre en void *, puisqu'on n'attend aucune généricité. De ce fait, c'est assez dangereux : si on passe un pointeur vers un int ou vers n'importe quoi qui ne soit pas un double, le résultat est parfaitement indéterminé et la lecture peut mener à une GPF si le type de la variable référencée est plus petit qu'un double...
|
|
| |
Message édité 1 fois, la dernière par Petit_PimoOosE le 21 juin 2005 - 17 h 38. |
| |
Huile de fraise.
|
manouchk
la vache!
Messages : 1 844 Inscrit le 25/12/02
Ville : Vitória (ES) Brésil
Non connecté
|
|
Posté le 21 juin 2005 - 17 h 49 m 35 s |
|
|
déréférencement veut dire renvoit la valeur au lieu de l'adresse de pointeur, c'est ça? (je ne connais pas le vocabulaire des pointeurs)
la généricité n'est pas dûe à moi mais au fait que j'utilise les méthode utilisées dans la GSL. Je dois créer une fonction ayant come paramètre un double (variable d'integration) et un pointeur de void, d'où l'utilité... Pour info, j'utilise la fonction gsl_integration_qags.
Sinon en fait je voudrais faire un peu la même chose mais en utilisant une structure de 4 doubles.
Une partie du code ressemble à ce qui se trouve plus bas.
et là je comprends pas ce que veut dire ce passage:
1.
2. struct f_params * params
3. = (struct f_params *)p;
4. double bias = (params->bias);
5. double temp = (params->temp);
6. double delta = (params->delta);
7. double Gnn = (params->Gnn);
cf code :
1.
2. #include <gsl/gsl_const_mksa.h>
3.
4. struct f_params { double bias; double temp; double delta; double Gnn};
5.
6. ....
7.
8. //fonction a integrer entre 0 et +inf pour avoir I(V)/(Gnn/e)=int_0^1 f(x)dx
9. double f (double E, void * p)
10. {
11. struct f_params * params
12. = (struct f_params *)p;
13. double bias = (params->bias);
14. double temp = (params->temp);
15. double delta = (params->delta);
16. double Gnn = (params->Gnn);
17. return Nsupra(E,delta)*(fermi(E-bias,temp)-fermi(E,temp));
18. //return N_supra(E,delta)*(fermi(E+bias,temp)-fermi(E-bias,temp));
19. }
|
|
| |
Message édité 1 fois, la dernière par manouchk le 21 juin 2005 - 17 h 51. |
| |
"Je ne suis pas chauvine mais la France est quand même la reine des fromages." Brigitte Fontaine chantant dans l'Europe de l'album "Des Visages Des Figures" de Noir Désir
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 21 juin 2005 - 18 h 38 m 20 s |
|
|
Le déréférencement, c'est l'accès à la valeur stockée à l'adresse pointée par le pointeur - attention à ne pas mélanger adresse pointée par le pointeur, c'est-à-dire la valeur du pointeur, et l'adresse du pointeur, qui est l'adresse de stockage de la valeur du pointeur.
pour f_params * params
= (struct f_params *)p;
c'est la même chose que pour la première question : tu transformes un void * en f_param *, donc un pointeur générique en un pointeur vers ta structure.
La flèche permet d'accéder à un champ de la structure pointée.
On peut dire que
double bias = params->bias; // les parenthèses ne sont pas nécessaires ici
est équivalent à
double bias = (*params).bias;
Ici, je déréférence d'abord - *params EST la structure, puis j'accède au champ que je veux. Mais la flèche est plus pratique et lisible à mon goût.
edit : oui, j'aime les pointeurs
|
|
| |
Message édité 3 fois, la dernière par Petit_PimoOosE le 21 juin 2005 - 18 h 49. |
| |
Huile de fraise.
|
manouchk
la vache!
Messages : 1 844 Inscrit le 25/12/02
Ville : Vitória (ES) Brésil
Non connecté
|
|
Posté le 21 juin 2005 - 18 h 52 m 58 s |
|
|
bon merci, comme ça c'est plus clair pour moi, je vais pouvoir faire mon programme (de fit) plus facilement!
ps : vive les adorateurs de pointeurs (jevais bientôt en devenir un je crois!)
|
|
| |
"Je ne suis pas chauvine mais la France est quand même la reine des fromages." Brigitte Fontaine chantant dans l'Europe de l'album "Des Visages Des Figures" de Noir Désir
|
gege38
Modérateur
Chief of the (¯`·.__[T3aM.BouL3T©]__.·´¯) Potatoe Reloaded
Messages : 14 097 Inscrit le 05/02/03
Ville : Domène
Non connecté
|
|
Posté le 21 juin 2005 - 19 h 23 m 28 s |
|
|
Le 21 juin 2005 - 18 h 52, manouchk a écrit :
ps : vive les adorateurs de pointeurs (jevais bientôt en devenir un je crois!)
|
Il faut vraiment etre sado-maso alors !
Non, franchement, il existe bien mieux maintenant
|
|
| |
" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld
|
manouchk
la vache!
Messages : 1 844 Inscrit le 25/12/02
Ville : Vitória (ES) Brésil
Non connecté
|
|
Posté le 21 juin 2005 - 19 h 30 m 39 s |
|
|
meux que les pointeurs?
c'est quoi??
|
|
| |
"Je ne suis pas chauvine mais la France est quand même la reine des fromages." Brigitte Fontaine chantant dans l'Europe de l'album "Des Visages Des Figures" de Noir Désir
|
gege38
Modérateur
Chief of the (¯`·.__[T3aM.BouL3T©]__.·´¯) Potatoe Reloaded
Messages : 14 097 Inscrit le 05/02/03
Ville : Domène
Non connecté
|
|
Posté le 21 juin 2005 - 19 h 37 m 14 s |
|
|
Le 21 juin 2005 - 19 h 30, manouchk a écrit :
meux que les pointeurs?
c'est quoi??
|
Pas en C évidemment
Dans d'autres langages, la gestion mémoire est autrement gérée grâce à un supeeeeer opérateur : new
(attention, new n'est pas limité aux langages objet C++/Java, mais à d'autres comme l'ADA)
|
|
| |
" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 21 juin 2005 - 19 h 37 m 26 s |
|
|
Je pense que gege pense à Java
Mais c'est bien, le C...
edit : grilled
mais je vien de voir un truc bizarre : c'est quoi, ça :
?
|
|
| |
Message édité 1 fois, la dernière par Petit_PimoOosE le 21 juin 2005 - 19 h 39. |
| |
Huile de fraise.
|
gege38
Modérateur
Chief of the (¯`·.__[T3aM.BouL3T©]__.·´¯) Potatoe Reloaded
Messages : 14 097 Inscrit le 05/02/03
Ville : Domène
Non connecté
|
|
Posté le 21 juin 2005 - 19 h 39 m 20 s |
|
|
Le 21 juin 2005 - 19 h 37, Petit_PimoOosE a écrit :
Je pense que gege pense à Java
Mais c'est bien, le C...
|
Non, pour une fois, je n'ai pas pensé qu'à Java. Franchement, faut avouer, les pointeurs, c'est la bête noire des programmeurs !
Merci les langages objet quels qu'ils soient
|
|
| |
" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 21 juin 2005 - 19 h 44 m 06 s |
|
|
 ... ben oui, moi qui suis un fana du C je dois avouer qu'avec Java, les pointeurs, l'allocation/désallocation mémoire et tout ça c'est fini, au bénéfice de plus de temps passé à la réflexion fonctionnelle... Mais bon, apprendre comment ça fonctionne, ça met les idées en place. Après, faut pas confondre le moyen et le l'objectif...
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
manouchk
la vache!
Messages : 1 844 Inscrit le 25/12/02
Ville : Vitória (ES) Brésil
Non connecté
|
|
Posté le 21 juin 2005 - 19 h 50 m 30 s |
|
|
hé bien quand la GSL sera écrite en java, je pourrait m'y mettre mais pour le moment je crois que ce n'est pas le cas! (ça me permettrait notamment de faire plus facilement une interface graphique qu'avec de c (je ne sais pas trop quoi utiliser avec le c est qui soit de haut niveau de programmation)
Sinon pourquoi pas en java sauf que je ne suis pas programmeur, physicien en fait, et je n'ai malheureusement (?) pas suffisamment de temps à consacrer à java pour m'y former!
Ceci dit les premiers contacts que j'ai eu avec m'ont fait dire que c'est "cool"...
et sinon F.params = α c'était en fait un (α) véritable alpha, je ne sais pas pourquoi! J'ai fai un copier coller depuis kwrite de alpha et ça a dû devenir la lettre greque alpha!
Sinon quand on comprend comment ça marche les pointeurs c'est pas trop dur non? (il y a juste à connaître les différentes syntaxes...)
|
|
| |
Message édité 1 fois, la dernière par manouchk le 21 juin 2005 - 19 h 55. |
| |
"Je ne suis pas chauvine mais la France est quand même la reine des fromages." Brigitte Fontaine chantant dans l'Europe de l'album "Des Visages Des Figures" de Noir Désir
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 21 juin 2005 - 19 h 54 m 11 s |
|
|
Le 21 juin 2005 - 19 h 50, manouchk a écrit :
hé bien quan la GSL sera écrite en java, je pourrait m'y mettre mais pour le moment je crois que ce n'est le cas!
Sinon pourquoi pas en java sauf que je ne suis pas programmeur, physicien en fait, et je n'ai malheureusement (?) pas suffisamment de temps à consacrer à java pour m'y former!
Ceci dit les premiers contacts que j'ai eu avec m'ont fait dire que c'est "cool"...
et sinon F.params = α c'était en fait F.params = α
c'est peut-être un bug/interférence désastreuse avec le bbcode :
le code :
[code]
1. F.params = α
2. [/code]
apparaît comme ceci :
|
les réflexions sur java, c'était plutôt des remarques d'ordre général ! bien sûr que quand tu peux pas faire autrement, faut composer avec.
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
gege38
Modérateur
Chief of the (¯`·.__[T3aM.BouL3T©]__.·´¯) Potatoe Reloaded
Messages : 14 097 Inscrit le 05/02/03
Ville : Domène
Non connecté
|
|
Posté le 21 juin 2005 - 20 h 55 m 00 s |
|
|
Le 21 juin 2005 - 19 h 54, bernie38 a écrit :
les réflexions sur java, c'était plutôt des remarques d'ordre général ! bien sûr que quand tu peux pas faire autrement, faut composer avec.
|
D'autant que je le répète, Java n'est pas le seul à proposer l'opérateur new.
C++ par exemple l'accepte
|
|
| |
" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
gege38
Modérateur
Chief of the (¯`·.__[T3aM.BouL3T©]__.·´¯) Potatoe Reloaded
Messages : 14 097 Inscrit le 05/02/03
Ville : Domène
Non connecté
|
|
Posté le 21 juin 2005 - 21 h 00 m 53 s |
|
|
Le 21 juin 2005 - 20 h 57, bernie38 a écrit :
oui mais C++ -> mauvais exemple 
|
Pourquoi ?
Sinon, évidemment, s'il l'a fait en C, autant rester en C, c'est sûr. Je réagissais uniquement à sa remarque sadomasochiste relative aux pointeurs : être fan d'eux, c'est un peu comme épiler la toison d'un yéti (c'est douloureux, long et dangereux  )
|
|
| |
" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 419 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 21 juin 2005 - 21 h 21 m 46 s |
|
|
Le 21 juin 2005 - 21 h 00, gege38 a écrit :
Le 21 juin 2005 - 20 h 57, bernie38 a écrit :
oui mais C++ -> mauvais exemple 
|
Pourquoi ?
Sinon, évidemment, s'il l'a fait en C, autant rester en C, c'est sûr. Je réagissais uniquement à sa remarque sadomasochiste relative aux pointeurs : être fan d'eux, c'est un peu comme épiler la toison d'un yéti (c'est douloureux, long et dangereux )
|
je dis mauvais exemple, parce que tant qu'à vouloir faire de l'objet, autant le faire en Java qui est plus "pur" que C++ qui mélange un peu tout, genre on peut faire du new() et du malloc(), tu trouves pas que ça fait brouillon et pas fini, entre deux chaises pour tout dire ?
Pour moi, toutes proportions gardées, le C++ est à Java ce que php est à... Java. Encore que C++ est bien moins foutoir et merdique que php mais bon...
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
gege38
Modérateur
Chief of the (¯`·.__[T3aM.BouL3T©]__.·´¯) Potatoe Reloaded
Messages : 14 097 Inscrit le 05/02/03
Ville : Domène
Non connecté
|
|
Posté le 21 juin 2005 - 21 h 26 m 57 s |
|
|
Le 21 juin 2005 - 21 h 21, bernie38 a écrit :
je dis mauvais exemple, parce que tant qu'à vouloir faire de l'objet, autant le faire en Java qui est plus "pur" que C++ qui mélange un peu tout, genre on peut faire du new() et du malloc(), tu trouves pas que ça fait brouillon et pas fini, entre deux chaises pour tout dire ?
Pour moi, toutes proportions gardées, le C++ est à Java ce que php est à... Java. Encore que C++ est bien moins foutoir et merdique que php mais bon...
|
D'un autre coté, Java est plus récent que C++. Donc c'est sûr, c'est plus propre.
M'enfin, là on digresse
Bon courage avec les pointeurs en tout cas et passe le bonjour au yéti
|
|
| |
" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 21 juin 2005 - 23 h 44 m 52 s |
|
|
gege> je t'assure qu'il y en a même pour aller compter les poils ensuite :-p (moi ? nooon !)
|
|
| |
Huile de fraise.
|
Gosseyn
Messages : 286 Inscrit le 24/01/05
Ville : Grenoble
Non connecté
|
|
Posté le 22 juin 2005 - 10 h 53 m 19 s |
|
|
je dis mauvais exemple, parce que tant qu'à vouloir faire de l'objet, autant le faire en Java qui est plus "pur" que C++ qui mélange un peu tout, genre on peut faire du new() et du malloc(), tu trouves pas que ça fait brouillon et pas fini, entre deux chaises pour tout dire ?
|
D'accord mais du coup on a le choix. et on peut migrer en "douceur" vers C++. Perso, en C++, je n'utilise plus malloc mais uniquement new. Je suis ptet prêt pour java tout compte fait.
|
|
| |
Message édité 1 fois, la dernière par Gosseyn le 22 juin 2005 - 10 h 57. |
| |
"Si vous perdez, ne perdez pas la leçon."
Gosseyn
|