Bonsoir,
Je trouve vraiment des difficultés de définir les paramètres à attribuer à une fonction ,et je sais bien qu'il n'y est pas fait au hasard .
Exemple :
et merciCode:
1
2
3
4
5
6
7 le type Fonction ( paramètres ); { les instructions }
Version imprimable
Bonsoir,
Je trouve vraiment des difficultés de définir les paramètres à attribuer à une fonction ,et je sais bien qu'il n'y est pas fait au hasard .
Exemple :
et merciCode:
1
2
3
4
5
6
7 le type Fonction ( paramètres ); { les instructions }
Bonjour,
J'ai du mal à comprendre ton problème.
Tu dois transmettre à ta fonction toutes les informations dont elle a besoin.
Par exemple :
Chaque paramètre est séparé par une virgule et est constitué d'un type et d'un nom facultatif si le paramètre n'est pas utilisé dans la fonction :Code:
1
2
3
4 int addition(int a, int b) { return a+b; }
Quand tu veux transmettre des données, tu as deux choix, les passer par :Code:
1
2
3
4 Type1 fonction(Type1 nom1, Type2) { return nom1; }
- copie ;
- pointeur ;
Les pointeurs seront utilisés quand :Code:
1
2
3
4
5 void fonction(int a)//copie d'un int void fonction(int * a)//pointeur sur un int void fonction(int * a)//copie d'un pointeur sur un int void fonction(int ** a)//pointeur de pointeur sur un int
- tu veux éviter la copie car la variable transmise est "trop grosse" (surtout pour le C++);
- tu veux modifier la valeur de la variable dans la fonction appelante.
On a aussi le mot clé "const" qui va s'appliquer sur l'élément à sa gauche et par défaut à sa droite pour le rendre constant (ou l'inverse j'ai un doute) :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void foo(int a) { a++; } void foo2(int * a) { (*a)++; } int a = 0; foo(a); //a vaut 0 car foo reçoit une copie de a; foo2(&a); //a vaut 1 car on a donné à foo2 un pointeur sur un a.
/!\ Les tableaux (ex. int a[X]) sont, quand ils sont passé en paramètres d'une fonction sont équivalents à passer un pointeur (ex. int * a), c'est la seule exception.Code:
1
2
3
4
5 const int a; // int constant, on ne peut pas modifier la valeur de a; const int * a; //pointeur sur un int constant, on ne peut pas modifier la valeur pointée par a; int const * a; //idem précédant int * const a; //pointeur constant sur un int, on ne peut pas modifier a mais on peut modifier la valeur pointée par a const int * const a; //on ne peut ni modifier la valeur de a ni l'int pointé par a.
Les pointeurs sont des variables qui contiennent l'adresse d'une autre variable :
Mais bon, n'importe quel cours/tutoriel de C devrait te dire cela (et sûrement bien mieux que moi).Code:
1
2
3
4
5
6
7
8 int a = 0; int * b; // il doit contenir l'adresse d'un int &a; //adresse de la variable a b = &a; //b contient l'adresse de la variable a *b; //variable pointée par b donc a. a = 6; *b; // vaut 6
Bonjour silver4,
ayant connu le même probleme, enfin je crois;
quand tu écris une fonction et/ou une procédure:
a) ex: tu souhaites simplement afficher un message genreCode:"Hello world !"
ta fonction n'a besoin d'aucuns paramètres à traiter donc tu mets void en paramètre dans la déclaration de ta foncion et tu l'appelle parCode:
1
2
3
4 void disBonjour (void); { printf ("Hello world !\n"); }
b) ex: tu souhaites traiter une variable donc il faut la transmettre à ta fonction.Code:disBonjour ();
Ta fonction a besoin d'un paramètre a traiter donc tu le mets avec son type en paramètre dans la déclaration de ta foncion et tu l'appelle parCode:
1
2
3
4
5 void foisDeux (int variable); { int resultat = variable * 2; printf ("variable fois 2 = %d\n", resultat); }
----Code:foisDeux (variable);
Voila le B.A.BA pour écrire des fonctions simplissimes vu par un autodidacte, les explications de Neckara étant beaucoup plus pertinentes mais peut-être un peu complexes pour débuter.
Dans l'espoir de pouvoir t'aider, ayant connu les mêmes difficultés lorsque j'ai découvert les fonctions en programmation et que le compilo m'envoyait des messages incompréhensibles .
Bonsoir,
oui ,exactement passer un argument à une fonction n'est pas fait au hasard ,
c'est à dire
une Exemple :
Mon compilateur m'affiche une erreur (structurale) des arguments insuffisantesCode:
1
2
3
4
5 int addition(int a); { int b return a+b; }
pour ma fonction (addition).
Autrement faire passer une argument à une fonction doit être suffisant ,le problème est encore plus compliqué lorsque ma fonction est plus (grande ) donc il n' a pas une chose déterminante ()???
à mon avis 8O().
est ce qu 'il y a une solution ,désolé je suis débutant et je veux au moins comprendre :oops:.
Bonjour,
Pourrais-tu nous montrer cette erreur ?Citation:
Mon compilateur m'affiche une erreur (structurale) des arguments insuffisantes
pour ma fonction (addition).
Je ne comprends absolument pas ce que tu essayes de nous dire. :aie:Citation:
Autrement faire passer une argument à une fonction doit être suffisant ,le problème est encore plus compliqué lorsque ma fonction est plus (grande ) donc il n' a pas une chose déterminante ()???
à mon avis ().
est ce qu 'il y a une solution ,désolé je suis débutant et je veux au moins comprendre .
Une exemple:
L'erreur est (conflit de type pour addition ) ,c'est à dire que les arguments attribués à la fonction addition sont insuffisants :roll:()Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> #include <stdlib.h> int addition(int a, int b); int main(void) { int result = addition(2, 3); printf("Résultat : %d", result); return 0; } int addition(int a) { int b; return a+b;
Je ne veux pas compliquer les choses ,mais comprendre (me baser suffisamment )!!!.
la correction est :
8O8O8OCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> #include <stdlib.h> int addition(int a, int b); int main(void) { int result = addition(2, 3); printf("Résultat : %d", result); return 0; } int addition(int a, int b) { return a+b;
Bonsoir,
Tu déclares une fonction avec deux paramètres et tu la définies avec un seul paramètre, c'est normal que le compilateur rouspète !
La déclaration : void mafonction(void); permet de dire au compilateur qu'il existe une fonction nommée "maFonction" qui retourne un void et qui ne prend rien en paramètre.
Pour la déclaration :
Tu dis au compilateur ce que dois faire ta fonction "maFonction".Code:
1
2
3
4 void mafonction(void) { // }
Si la "signature" de la fonction lors de la déclaration n'est pas la même que lors de la définition, le compilateur ne va pas comprendre.
Tu cherches du polymorphisme ??
J'arrive pas à voir le problème non plus =/
Bonsoir
Neckara a compris mon problème :aie:().
Bonsoir,
comment je peux me renseigner et approfondir à propos de ce sujet (les fonctions) du point de vue structurelle et apprendre la base svp()8O.
Rendu là, tu affirmes avoir besoin de cours/tutoriels. Cela va donc être une réponse classique :
- En haut de l'écran : menu langages -> item "C" (mais ça, on y est déjà), il ne te restes plus qu'à appuyer sur le bouton "Tutoriels C",
- Tu mélanges les mots cours/tutoriel, programmation/langage, et "c" sur google. Tu y trouveras des cours de profs de fac ou d'école, éventuellement téléchargeables (ne t'arrêtes pas à la première page de réponse).
Bonne lecture !
Bonjour,
essaie de rentrer "Anne Canteau cours c" dans un moteur de recherche, c'est pas mal, voir mieux que bien, à mon avis.
Courage silver4
Mais je pense pas que le problème soit purement la connaissance du langage ,enfin pour créer de bonne fonction y a qu'un méthode l'expérience et elle s'acquiert que par la pratique et l'observation des autres fonctions (par exemple des fonction de la lib standard , SDL,opengl ect).
Donc pour ma part si il sait faire des fonction ben qu'il en créer même plusieurs s'il le faut et qu'il s'amuse a les utilisé il remarquera que certaine fonction sont plus facile a manipulé que autre.