[C]Un ptit coup de main sur pointeurs et fonction svp

Un ptit coup de main sur pointeurs et fonction svp [C] - C++ - Programmation

Marsh Posté le 10-01-2003 à 01:31:31    

Voila j'ai eu une interro et y a deux fonctions j'ai pas compris.. Vu que je vais bientot avoir examen il serait temps de capter :p
 
char fn3 (double(*p)(double a[]));
C'est quoi l'argument qu'on passe la dedans ???
 
struct liste *fn4(double * t[]);
c'est quoi l'argument et le return ??
 
 
Merci bcp :)

Reply

Marsh Posté le 10-01-2003 à 01:31:31   

Reply

Marsh Posté le 10-01-2003 à 03:23:35    

[IQS]Krusty a écrit :

Voila j'ai eu une interro et y a deux fonctions j'ai pas compris.. Vu que je vais bientot avoir examen il serait temps de capter :p
 
char fn3 (double(*p)(double a[]));
C'est quoi l'argument qu'on passe la dedans ???
 
struct liste *fn4(double * t[]);
c'est quoi l'argument et le return ??
 
 
Merci bcp :)


 
la première est une fonction nommée fn3 qui renvoie un char : char fn3 (des conneries)
l'espace après fn3 est là pour tefaire chier.
 
l'argument est de type double(*p)(double a[])
donc un pointeur sur fonction qui renvoie un double (nommé p ici)  : double(*p)(des conneries)
 
la foncction en question prend comme argument un tableau de doubles : double a[]
le 'a' est là pour te faire chier, car on peut (ou pas) donner des noms dans les signatures de fonctions :
int f(int a);
ou  
int f(int);
 
la seconde est une fonction qui renvoie un pointeur sur une structure liste : struct liste *fn4(des conneries);
et qui prend en paramètre un tablea de pointeurs sur des doubles : double * t[]
 
J'espère ne pas m'être planté car c'est hyper chiant à lire ton truc.

Reply

Marsh Posté le 10-01-2003 à 04:38:55    

Merci bcp malgré l'heure :jap:

Reply

Marsh Posté le 10-01-2003 à 07:43:04    

[IQS]Krusty a écrit :

Merci bcp malgré l'heure :jap:


 
De rien, j'ai eu le temps de finir de rajouter le support des exception à pocketsmalltalk dans la nuit, en même temps que je glandais sur le net.

Reply

Marsh Posté le 11-01-2003 à 04:43:45    

Bravo nraynaud, tu as réussi son exercice :D.
 
Une petite précision:
'double a[]' en argument se lit tableau mais est en réalité un pointeur: 'double* a'.
'double * t[]' est en réalité un 'double**t'.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 11-01-2003 à 05:28:19    

Musaran a écrit :

Bravo nraynaud, tu as réussi son exercice :D.
 
Une petite précision:
'double a[]' en argument se lit tableau mais est en réalité un pointeur: 'double* a'.
'double * t[]' est en réalité un 'double**t'.


 
ha bon ??? pourtant mon copilo ne veut pas de :
int i = 10
int a[10] = &i;
 
ni de :
double *fv;
double *fa[10] = &fv;
 
conclusion : c'est pas pareil, par contre,  
un type tableau est compatible avec un type pointeur (et non l'inverse).
Quand le besoin se fait sentir, le compilo converti un tableau en pointeur.
 
Si tu commences à dire n'importe quoi sur la compatibilité des types dès le C (où ils ne servent, rappelons-le non pas à la qualité mais à l'allocation de mémoire) qu'est-ce que ça va être au moment de passer à Eiffel !


Message édité par nraynaud le 11-01-2003 à 05:29:17
Reply

Marsh Posté le 12-01-2003 à 04:47:57    

nraynaud a écrit a écrit :

Quand le besoin se fait sentir, le compilo converti un tableau en pointeur.


Et une fonction C/C++ ne peut prendre de tableau en argument formel.
 
Pour ces deux raisons, les crochets vides sont ramenés à un pointeur dans le type d'un argument, et uniquement dans ce cas.

Code :
  1. int i;
  2. void func1(int arg1[]); //int* arg1 en vrai
  3. func1(&i);
  4. double* pd;
  5. void func2(double* arg2[]); //double** arg2 en vrai
  6. func2(&pd);


Par contre cela ne vaut que pour la première 'dimension'. Les suivantes font partie intégrante du type, et doivent être spécifiées:

Code :
  1. int ai[10];
  2. void func3(int arg3[][10]); //int (*arg3)[10] en vrai (pointeur sur tableau de 10 int)
  3. func3(&ai);


Ça fait partie des incohérences historiques du C, répercutées en C++ au nom de la sacro-sainte compatibilité.
 
Le C++ a des zones sombres, ouais, bien moisies même...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 13-01-2003 à 19:42:39    

Bon est ce qu'on peut resumer et me dire si c'est bon (parce que la ca devient la prise de tête avec les copains)
 

Code :
  1. void calcul(int (*t)[MAX]); /* Dans l'argument on a bien un pointer vers un tableau d'integer à deux dimensions de MAX colonnes */
  2. void calcul(int *t[10]); /* Dans l'argument on a bien un tableau de 10 pointeurs de type integer */


 
merciii


Message édité par [IQS]Krusty le 13-01-2003 à 19:46:10
Reply

Marsh Posté le 14-01-2003 à 01:53:02    

Le premier est un pointeur de tableau (simple dimension) de MAX entiers.
Il peut s'utiliser...

Code :
  1. t[x][y]; //comme un tableau à 2 dimensions
  2. (*t)[y]; //comme pointeur de tableau


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed