Pourquoi ce commentaire est faux ? - C - Programmation
Marsh Posté le 03-08-2006 à 18:25:39
parceque c'est un piege syntaxique, c'est pourtant préciser dans k&r
void put_rec(int rec[6], FILE *fp)
est équivalent à
void put_rec(int *rec, FILE *fp)
on ne peut pas passer de tableau à une fonction en C, on se contente de passer son adresse et dans la fonction on se retrouve avec un pointeur contenant l'adresse d'un tableau du meme type
Marsh Posté le 03-08-2006 à 19:21:20
skelter a écrit : on ne peut pas passer de tableau à une fonction en C, on se contente de passer son adresse et dans la fonction on se retrouve avec un pointeur contenant l'adresse d'un tableau du meme type |
on se retrouve avec l'adresse du premier élément du tableau. Cette adresse est du type pointeur sur élément du tableau.
Marsh Posté le 03-08-2006 à 20:07:32
skelter a écrit : parceque c'est un piege syntaxique, c'est pourtant préciser dans k&r |
Il fallait donc que je précisé le nombre d'éléments souhaités(dans le cas de l'exo 6) en faisant :
len = fwrite(rec, 6*sizeof(rec), 1, fp); ?
Marsh Posté le 03-08-2006 à 20:15:57
Emmanuel Delahaye a écrit : on se retrouve avec l'adresse du premier élément du tableau. Cette adresse est du type pointeur sur élément du tableau. |
oui, j'entendais par la pointeur de type int <-> tableau de type int mais on dit pointeur sur
Citation : |
surtout pas ! pas de nombre magique, le nombre d'élément doit etre passé en parametre
Marsh Posté le 03-08-2006 à 20:46:09
Gattuso a écrit : Il fallait donc que je précisé le nombre d'éléments souhaités(dans le cas de l'exo 6) en faisant : |
Comme l'as dit skelter, passe la taille en paramètre.
Et ce n'est pas sizeof(rec) mais sizeof(*rec).
Marsh Posté le 03-08-2006 à 21:35:39
D'ailleurs les compilos pourraient p-ê mettre un warning quand on déclare un truc comme:
void put_rec(int rec[6], FILE *fp) ;
ça ne coûterait rien et ça signalerait une erreur à coup sûr.
Marsh Posté le 04-08-2006 à 12:10:20
Voire meme interdire cette écriture dans le standard...
(corrolaire : à qui/à quoi sert cette écriture? (à part aux professeurs qui ont le K&R sous le nez pour écrire leurs exos ))
Marsh Posté le 04-08-2006 à 14:27:03
retrox a écrit : Voire meme interdire cette écriture dans le standard... |
Elle a valeur 'documentaire', et est obligatoire quand on utilise plus d'une dimension. En fait l'écriture de base est :
Code :
|
etc.
Comme le compilateur n'a pas besoin de la dimension la plus à gauche, elle peut se simplifier en :
Code :
|
etc.
Comme le paramètre est en réalité un pointeur et non un tableau (malgré les apparences), on peut aussi écrire comme ceci :
Code :
|
Bienvenue dans le monde magique du langage C.
Code :
|
Marsh Posté le 04-08-2006 à 15:48:45
Merci pour les précisions. M'enfin tout ce bazard pour pas se casser à faire l'adressage soi-meme... Mais bon j'ai compris la nécessité d'avoir les n-1 dimensions "à droite", c'est déjà ça
Marsh Posté le 03-08-2006 à 18:04:46
Bonjour,
est-ce que quelqu'un pourrait m'expliquer pourquoi ce commentaire est faux ?
En parametre de la fonction, on a un
donc
est censé donné 6*taille d'un int
la ligne :
devrait donc écrire dans fp 1 bloc de 6 entiers.
Je ne comprends pas très bien pourquoi le commentaire est faux
Message édité par Gattuso le 03-08-2006 à 18:05:15