Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1377 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°283348
[IQS]Krust​y
Posté le 10-01-2003 à 01:31:31  profilanswer
 

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 :)

mood
Publicité
Posté le 10-01-2003 à 01:31:31  profilanswer
 

n°283358
nraynaud
lol
Posté le 10-01-2003 à 03:23:35  profilanswer
 

[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.

n°283364
[IQS]Krust​y
Posté le 10-01-2003 à 04:38:55  profilanswer
 

Merci bcp malgré l'heure :jap:

n°283369
nraynaud
lol
Posté le 10-01-2003 à 07:43:04  profilanswer
 

[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.

n°283977
Musaran
Cerveaulté
Posté le 11-01-2003 à 04:43:45  profilanswer
 

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
n°283979
nraynaud
lol
Posté le 11-01-2003 à 05:28:19  profilanswer
 

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
n°284493
Musaran
Cerveaulté
Posté le 12-01-2003 à 04:47:57  profilanswer
 

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
n°285502
[IQS]Krust​y
Posté le 13-01-2003 à 19:42:39  profilanswer
 

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
n°285727
Musaran
Cerveaulté
Posté le 14-01-2003 à 01:53:02  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
fonction imap -> saturation du proc & de la RAMUtilisation de la fonction LoadLibrary == Visual C++
Méssage d'erreur à l'appel d'une fonction...Pb avec la fonction highlight_string(). [RESOLU]
Problème avec la fonction mail()J'ai bcp de mal avec les pointeurs, un peu d'aide svp ...
[C] problème avec la fonction fwrite(...)Fonction inverse de chr() ???
pourquoi ma fonction d'1 ligne marche pasIncorporation d'une fonction RechercheV dans une macro
Plus de sujets relatifs à : [C]Un ptit coup de main sur pointeurs et fonction svp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR