Vous êtes sur la page 1sur 15

COLE MAROCAINE DINGNIERIE-RABAT

LANGAGE C
Ralis par Mr Brahim LAMHARCHI

Anne universitaire 2011 - 2012

Les bases de la programmation en C


I- Historique
Le C a t conu en 1972 par Dennis Richie et Ken Thompson, chercheurs aux Bell Labs, afin de dvelopper un systme dexploitation UNIX. En 1978, Brian Kernighan et Dennis Richie publient la dfinition classique du C dans le livre The C programming language. Le C devenant de plus en plus populaire dans les annes 80, plusieurs groupes mirent sur le marchdes compilateurs comportant des extensions particulires. En 1983, lANSI (American National Standards Institute) dcida de normaliser le langage; ce travail sacheva en 1989 par la dfinition de la norme ANSI C. Celle-ci fut reprise telle quelle par lISO (International Standards Organization) en 1990.

II- Les composants lmentaires du C


Un programme en langage C est constitu des groupes de composants lmentaires suivants : les identificateurs, les mots-clefs, les constantes, les chanes de caractres, les oprateurs, les signes de ponctuation et les commentaires. 1- Les identificateurs Le rle dun identificateur est de donner un nom une entit du programme. Plus prcisment, un identificateur peut dsigner : un nom de variable ou de fonction, un type dfini par typedef, struct, union ou enum, une tiquette. Un identificateur est une suite de caractres parmi :les lettres (minuscules ou majuscules, mais non accentues), les chiffres et le trait de soulignement _ . Le premier caractre dun identificateur ne peut pas tre un chiffre. Par exemple, var1, tab23 ou deb sont des identificateurs valides; par contre, 1i et i:j ne le sont pas. Il est cependant dconseill dutiliser _ comme premier caractre dun identificateur car il est souvent employ pour dfinir les variables globales de lenvironnement C. Les majuscules et minuscules sont diffrencies. 2- Les mots-clefs Un certain nombre de mots, appels mots-clefs, sont rservs pour le langage lui-mme et ne peuvent pas tre utiliss comme identificateurs. LANSI C compte 32 mots clefs que lon peut ranger en catgories : les spcificateurs de stockage : auto, register, static, extern, typedef ; les spcificateurs de type : char, double, enum, float, int, long, short, signed, struct, union, unsigned et void ; les qualificateurs de type : const et volatile ; les instructions de contrle : break, case, continue, default, do, else, for, goto, if, switch et while ; divers : return et sizeof.

Page 2

3- Les commentaires Un commentaire dbute par /* et se termine par */. Un commentaire sur la mme ligne dbute par // On ne peut pas imbriquer des commentaires. Quand on met en commentaire un morceau de programme, il faut donc veiller ce que celui-ci ne contienne pas de commentaire. 4- Structure dun programme C Un programme en C se compose des parties suivantes : <dclarations de bibliothques> <dclarations de variables globales> <dclarations de fonctions> main() { <dclarations de variables locales> <instructions> } 5- Les types prdfinis Le C est un langage typ. Cela signifie en particulier que toute variable, constante ou fonction est dun type prcis. Le type dun objet dfinit la faon dont il est reprsent en mmoire. La mmoire de lordinateur se dcompose en une suite continue doctets. Chaque octet de la mmoire est caractris par son adresse, qui est un entier. Deux octets contigus en mmoire ont des adresses qui diffrent dune unit. Quand une variable est dfinie, il lui est attribu une adresse. Cette variable correspondra une zone mmoire dont la longueur (le nombre doctets) est fixe par le type. Les types de base en C concernent les caractres, les entiers et les flottants (nombres rels). Ils sont dsigns par les mots-clefs suivants : char, int, float, double, short, long et unsigned. 5.1- Le type caractre Le mot-clef char dsigne un objet de type caractre. Un char peut contenir nimporte quel lment du jeu de caractres de la machine utilise. La plupart du temps, un objet de type char est cod sur un octet; cest lobjet le plus lmentaire en C. Le jeu de caractres utilis correspond gnralement au codage ASCII (sur 7 bits). La plupart des machines utilisent dsormais le jeu de caractres ISO-8859 (sur 8 bits), dont les 128 premiers caractres correspondent aux caractres ASCII. Les 128 derniers caractres (cods sur 8 bits) sont utiliss pour les caractres propres aux diffrentes langues. La version ISO-8859-1 (aussi appele ISOLATIN-1) est utilise pour les langues dEurope occidentale. Ainsi, le caractre de code 232 est le , le caractre 233 correspond au , etc.

Page 3

caractre
! # $ % & ( ) * + , . / 0 1 2 3 4 5 6 7

code
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

caractre
8 9 : ; < = > ? @ A B C D E F G H I J K L M N O

code
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

caractre
P Q R S T U V W X Y Z [ \ ] ^ _ a b c d e f g

code
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

caractre
h i j k l m n o p q r s t u v w x y z { | } ~ DEL

code
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

Tab. 1 Codes ASCII des caractres imprimables

Une des particularits du type char en C est quil peut tre assimil un entier : tout objet de type char peut tre utilis dans une expression qui utilise des objets de type entier. Par exemple, si c est de type char, lexpression c + 1 est valide. Elle dsigne le caractre suivant dans le code ASCII. Manipulation de caractres <ctype.h> Toutes les fonctions ci-dessous permettent de tester une proprit du caractre pass en paramtre. Elles renvoient la valeur 1 si le caractre vrifie la proprit et 0 sinon :
Fonction isalnum isalpha islower isupper Renvoi 1 si le caractre est une lettre ou un chiffre une lettre une lettre minuscule une lettre majuscule

Tab. 2 Fonctions oprant sur un caractre

Page 4

On dispose galement de deux fonctions permettant la conversion entre lettres minuscules et lettres majuscules :
Fonction tolower toupper Rsultat

convertit c en minuscule si cest une lettre majuscule, retourne c sinon. convertit c en majuscule si cest une lettre minuscule, retourne c sinon.
Tab. 3 Fonctions oprant sur un caractre

5.2- Les types entiers Le mot-clef dsignant le type entier est int. Le type int peut tre prcd dun attribut de prcision (short ou long) et/ou dun attribut de reprsentation (unsigned). On utilisera donc un des types suivants en fonction de la taille des donnes stocker :
Type de donnes short int unsigned short int int unsigned int long int unsigned long int Taille en octets 2 2 4 4 4 4 Plage de valeurs accepte [-215, 215 -1] (-32768 +32767) [0 .. 232 -1] (0 65535) [- 231 .. 231 - 1] (-2147483648 2147483647) [0 .. 232 - 1 ] (0 4294967295) [- 231 .. 231 1] (-2147483648 2147483647) [0 .. 232 1] (0 4294967295)

Tab. 4 Les types entiers

5.3- Les types flottants (Rel) Les types float, double et long double servent reprsenter des nombres en virgules flottantes. Ils correspondent aux diffrentes prcisions possibles :
Type de donnes float double long double Signification Flottant (Rel) Flottant double prcision Flottant quadruple prcision Taille en octets 4 8 12 Plage de valeurs 3.4*10-38 3.4*1038 1.7*10-308 1.7*10308 3.4*10-4932 3.4*104932

Tab. 5 Les types flottants

6- Les constantes Une constante est une valeur qui apparat littralement dans le code source dun programme, le type de la constante tant dtermin soit explicitement soit par la faon dont la constante est crite. Pour dsigner un caractre imprimable, il suffit de le mettre entre apostrophes (par ex. A ou $). Les seuls caractres imprimables quon ne peut pas reprsenter de cette faon sont lantislash et lapostrophe, qui sont respectivement dsigns par \\ et \. Le point dinterrogation et les guillemets peuvent aussi tre dsigns par les notations \? et \".

Page 5

Les caractres non imprimables les plus frquents disposent aussi dune notation plus simple : \n : nouvelle ligne \r : retour chariot \t : tabulation horizontale \f : saut de page \v : tabulation verticale \b : retour arrire Par dfaut, une constante entire est reprsente avec le format interne le plus court permettant de la reprsenter parmi les formats des types int, long int et unsigned long int. On peut cependant spcifier explicitement le format dune constante entire en la suffixant par u ou U pour indiquer quelle est non signe, ou en la suffixant par l ou L pour indiquer quelle est de type long. Par exemple :
Constante Type int unsigned int Constante Type long int unsigned long int

1234 1234U

123456789L 123456789UL

Les constantes relles sont reprsentes par la notation classique par mantisse et exposant. Lexposant est introduit par la lettre e ou E, il sagit dun nombre dcimal ventuellement sign. Par dfaut, une constante relle est reprsente avec le format du type double. On peut cependant influer sur la reprsentation interne de la constante en lui ajoutant un des suffixes f (indiffremment F) ou l (indiffremment L). Les suffixes f et F forcent la reprsentation de la constante sous forme dun float, les suffixes l et L forcent la reprsentation sous forme dun long double. Par exemple :
Constante Type double double Constante Type float

12.34 12.3e-4

12.34F 12.34L

long double

Une constante chane de caractres est une suite de caractres entours par des guillemets. Par exemple "Ceci est une chane de caractres". Une chane de caractres peut contenir des caractres non imprimables, dsigns par les reprsentations vues prcdemment. Par exemple "ligne 1 \n ligne 2". A lintrieur dune chane de caractres, le caractre " doit tre dsign par \". Enfin, le caractre \ suivi dun passage la ligne est ignor. Cela permet de faire tenir de longues chanes de caractres sur plusieurs lignes. Par exemple "ceci est une longue longue longue longue longue longue longue longue longue\ chane de caractres". Une constante peut tre dclare de deux faons : Avec le mot-clef const : const float pi=3.1415 ; //dfinition explicite du type de la constante Avec #define : #define pi 3.1415 ; // le type de la constante est dfini implicitement

Page 6

7- Les oprateurs 7.1- Les oprateurs arithmtiques Les oprateurs arithmtiques classiques sont loprateur unaire - (changement de signe) ainsi que les oprateurs binaires +, -, *, /(division) et % ( reste de la division). Ces oprateurs agissent de la faon attendue sur les entiers comme sur les flottants. Leurs seules spcificits sont les suivantes: Contrairement dautres langages, le C ne dispose que de la notation / pour dsigner la fois la division entire et la division entre flottants. Si les deux oprandes sont de type entier, loprateur / produira une division entire (quotient de la division). Par contre, il dlivrera une valeur flottante ds que lun des oprandes est un flottant. Loprateur % ne sapplique qu des oprandes de type entier. Si lun des deux oprandes est ngatif, le signe du reste dpend de limplmentation, mais il est en gnral le mme que celui du dividende. 7.2- Les oprateurs relationnels Les oprateurs relationnels ou de comparaison sont : >, >=, <, <=, == et != (diffrent). Une expression relationnelle a pour syntaxe : exp1 op exp2. Les deux expressions sont values puis compares. La valeur rendue est de type int (il ny a pas de type boolen en C); elle vaut 1 si la condition est vraie, et 0 sinon. 7.3- Les oprateurs logiques Les oprateurs logiques sont : && (ET), || (OU) et ! (NON). Comme pour les oprateurs de comparaison, la valeur retourne par ces oprateurs est un int qui vaut 1 si la condition est vraie et 0 sinon. Les oprateurs daffectation compose 7.4- Loprateur de conversion de type Loprateur de conversion de type, appel cast, permet de modifier explicitement le type dun objet. On crit (type) objet. Par exemple : main() { int i = 3, j = 2; printf("%f \n",(float)i/j); // retourne la valeur 1.5. }

Page 7

III- Les instructions simples


1- Instruction daffectation En C, laffectation est symbolise par le signe =. Sa syntaxe est : variable = expression ; Le terme de gauche de laffectation peut tre une variable simple, un lment de tableau mais pas une constante. Cette opration a pour effet dvaluer lexpression expression et daffecter la valeur obtenue la variable (terme de gauche). Laffectation effectue une conversion de type implicite : la valeur de lexpression (terme de droite) est convertie dans le type du terme de gauche. Par exemple, le programme suivant : main() { int i, j = 2 ; float x = 2.5 ; i=j+x; x = x + i; printf("\n %f \n",x); } imprime pour x la valeur 6.5 (et non 7), car dans linstruction i = j + x;, lexpression j + x a t convertie en entier. Les oprateurs daffectation compose sont : +=, -=, *=, /=, %= Pour chacun des oprateurs +, -, *, / et %, lexpression : exp1 op= exp2, est quivalente : exp1 = exp1 op exp2 Les oprateurs dincrmentation ++ et de dcrmentation -- sutilisent aussi bien en suffixe (i++) quen prfixe (++i). Dans les deux cas la variable i sera incrmente, toutefois dans la notation suffixe la valeur retourne sera lancienne valeur de i alors que dans la notation prfixe se sera la nouvelle. Par exemple, int a = 3, b, c; b = ++a; /* a et b valent 4 */ c = b++; /* c vaut 4 et b vaut 5 */ Une expression peut tre constitue dune suite dexpressions spares par des virgules : exp1, exp2, ... , expn Cette expression est alors value de gauche droite. Sa valeur sera la valeur de lexpression de droite. Par exemple, le programme suivant imprime b=5. main() { int a, b; b = ((a = 3), (a + 2)); printf("\n b = %d \n",b); }
Page 8

2- Les fonctions dentres/sorties Il sagit des fonctions de la librairie standard stdio.h (#include <stdio.h>) utilises avec les units classiques dentres-sorties, qui sont respectivement le clavier et lcran. 2.1- La fonction dcriture printf La fonction printf est une fonction dimpression formate, ce qui signifie que les donnes sont converties selon le format particulier choisi. Sa syntaxe est : printf("chane de contrle ",exp1, ..., expn); La chane de contrle contient le texte afficher et les spcifications de format correspondant chaque expression de la liste. Les spcifications de format ont pour but dannoncer le format des donnes visualiser. Elles sont introduites par le caractre %, suivi dun caractre dsignant le format dimpression. En plus du caractre donnant le type des donnes, on peut ventuellemnt prciser certains paramtres du format dimpression, qui sont spcifis entre le % et le caractre de conversion dans lordre suivant: largeur minimale du champ dimpression: %10d spcifie quau moins 10 caractres seront rservs pour imprimer lentier. Par dfaut, la donne sera cadre droite du champ. Le signe - avant le format signifie que la donne sera cadre gauche du champ (%-10d). prcision: %.12f signifie quun flottant sera imprim avec 12 chiffres aprs la virgule. De mme %10.2f signifie que lon rserve 12 caractres (incluant le caractre .) pour imprimer le flottant et que 2 dentre eux sont destins aux chiffres aprs la virgule. Lorsque la prcision nest pas spcifie, elle correspond par dfaut 6 chiffres aprs la virgule.
format %d %ld %u %lu %f %lf %e %le %g %lg %c %s conversion en int long int unsigned int unsigned long int double long double double long double double long double unsigned char char* criture dcimale signe dcimale signe dcimale non signe dcimale non signe dcimale virgule fixe dcimale virgule fixe dcimale notation exponentielle dcimale notation exponentielle dcimale, reprsentation la plus courte parmi %f et %e dcimale, reprsentation la plus courte parmi %lf et %le caractre chane de caractres
Tab. 6 Les formats daffichage

2.2- La fonction de saisie scanf La fonction scanf permet de saisir des donnes au clavier et de les stocker aux adresses spcifies par les arguments de la fonction. Sa syntaxe est : scanf("chane de controle",argument-1,...,argument-n) ;
Page 9

Un argument est constitu de loprateur & suivi du nom dune variable (ex &a). La chane de contrle indique le format dans lequel les donnes lues sont converties. Elle ne contient pas dautres caractres (notamment pas de \n). Comme pour printf, les conversions de format sont spcifies par un caractre prcd du signe %. Les formats valides pour la fonction scanf diffrent lgrement de ceux de la fonction printf. Les donnes entrer au clavier doivent tre spares par des blancs ou des <Return> sauf sil sagit de caractres. On peut toutefois fixer le nombre de caractres de la donne lire. Par exemple %3s pour une chane de 3 caractres, %10d pour un entier qui stend sur 10 chiffres, signe inclus.
format %d %hd %ld %u %hu %lu %f %lf %Lf %e %le %Le %g %lg %Lg %c %s type dobjet point int short int long int unsigned int unsigned short int unsigned long int float double long double float double long double Float Double char char* reprsentation de la donne saisie dcimale signe dcimale non signe flottante virgule fixe flottante notation exponentielle flottante virgule fixe ou notation exponentielle caractre chane de caractres

Tab. 7 Les formats de saisie pour la fonction scanf

2.3- Impression et lecture de caractres Les fonctions getchar et putchar permettent respectivement de lire et dimprimer des caractres. Il sagit de fonctions dentres-sorties non formates. La fonction getchar retourne un int correspondant au caractre lu. Pour mettre le caractre lu dans une variable caractere, on crit : caractere = getchar(); La fonction putchar crit caractere sur la sortie standard : putchar(caractere);

IV- Les instructions de branchement conditionnel


On appelle instruction de contrle toute instruction qui permet de contrler le fonctionnement dun programme. Parmi les instructions de contrle, on distingue les instructions de branchement et les boucles. Les instructions de branchement permettent de dterminer quelles instructions seront excutes et dans quel ordre. 1- Branchement conditionnel ifelse Syntaxe : if ( exp) <bloc-instruction-1>; else <bloc instruction-2>;
Page 10

Exemple :

if (a>b) min=b; else min=a; //affecte min l plus petit de a et de b

2- Branchement multiple switch Syntaxe : switch (expression) { case constante-1 : liste dinstructions 1 ; break; case constante-2 : liste dinstructions 2 ; break; ... case constante-n : liste dinstructions n ; break; default : liste dinstructions 0 ; break; } Si la valeur de expression est gale lune des constantes, la liste dinstructions correspondant est excute. Sinon la liste dinstructions 0 correspondant default est excute. Linstruction default est facultative. 3- Loprateur conditionnel ternaire Loprateur conditionnel ? est un oprateur ternaire. Sa syntaxe est la suivante:

condition ? expression-1 : expression-2 ;


Cette expression est gale expression-1 si condition est satisfaite, et expression-2 sinon. Par exemple, lexpression x >= 0 ? x : -x ; correspond la valeur absolue dun nombre. De mme linstruction m = ((a > b) ? a : b); affecte m le maximum de a et de b.

V- Les boucles
Les boucles permettent de rpter une srie dinstructions tant quune certaine condition nest pas vrifie. 1- Boucle for Syntaxe : for ( expr 1 ; expr 2 ; expr 3) <instruction> ; Par exemple, pour imprimer tous les entiers de 0 9, on crit : for (i = 0; i < 10; i++) printf("\n i = %d",i); A la fin de cette boucle, i vaudra 10. Les trois expressions utilises dans une boucle for peuvent tre constitues de plusieurs expressions spares par des virgules. Cela permet par exemple de faire plusieurs initialisations la fois. Par exemple, pour calculer la factorielle dun entier, on peut crire :
Page 11

int n, i, fact; for (i = 1, fact = 1; i <= n; i++) fact *= i; On peut galement insrer linstruction fact *= i; dans la boucle for ce qui donne : int n, i, fact; for (i = 1, fact = 1; i <= n; fact *= i, i++); 2- Boucle while Syntaxe : while (expression ) <instruction> ; Tant que expression est vrifie, <instruction> est excute. Si expression nest pas vrifie au dpart, <instruction> ne sera jamais excute. Par exemple, le programme suivant imprime les entiers de 1 9. i = 1; while (i < 10) { printf("\n i = %d",i); i++; } 3- Boucle do while Il peut arriver que lon ne veuille effectuer le test de continuation quaprs avoir excut linstruction. Dans ce cas, on utilise la boucle do while. Syntaxe : do <instruction> while (expression); Ici, <instruction> sera excute tant que expression est vrifie. Cela signifie donc que <instruction> est toujours excute au moins une fois. Par exemple, pour saisir au clavier un entier entre 1 et 10 : int a; do } printf("\n Entrez un entier entre 1 et 10 : "); scanf("%dU",&a); } while ((a <= 0) || (a > 10));

Page 12

VI- Les conventions dcriture dun programme C


Il existe trs peu de contraintes dans lcriture dun programme C. Toutefois ne prendre aucune prcaution aboutirait des programmes illisibles. Aussi existe-t-il un certain nombre de conventions. On ncrit quune seule instruction par ligne: le point virgule dune instruction ou dune dclaration est toujours le dernier caractre de la ligne. Les instructions sont disposes de telle faon que la structure modulaire du programme soit mise en vidence. En particulier, une accolade ouvrante marquant le dbut dun bloc doit tre seule sur sa ligne ou place la fin dune ligne. Une accolade fermante est toujours seule sur sa ligne. On laisse un blanc entre les mots-clefs if, while, do, switch et la parenthse ouvrante qui suit, aprs une virgule, de part et dautre dun oprateur binaire. On ne met pas de blanc entre un oprateur unaire et son oprande, ni entre les deux caractres dun oprateur daffectation compose. Les instructions doivent tre indentes afin que toutes les instructions dun mme bloc soient alignes.

Page 13

Les fonctions
Comme dans la plupart des langages, on peut en C dcouper un programme en plusieurs fonctions. Une seule de ces fonctions existe obligatoirement ; cest la fonction principale appele main. Cette fonction principale peut, ventuellement, appeler une ou plusieurs fonctions secondaires. De mme, chaque fonction secondaire peut appeler dautres fonctions secondaires ou sappeler elle-mme (dans ce dernier cas, on dit que la fonction est rcursive).

I- Dfinition dune fonction


La dfinition dune fonction est la donne du texte de son algorithme, quon appelle corps de la fonction. Elle est de la forme : type nom-fonction ( type-1 arg-1,..., type-n arg-n) { <dclarations de variables locales> <liste dinstructions> ; } La premire ligne de cette dfinition est len-tte de la fonction. Dans cet en-tte, type dsigne le type de la fonction, cest--dire le type de la valeur quelle retourne. Contrairement dautres langages, il ny a pas en C de notion de procdure ou de sous-programme. Une fonction qui ne renvoie pas de valeur est une fonction dont le type est spcifi par le mot-clef void. Les arguments de la fonction sont appels paramtres formels, par opposition aux paramtres effectifs qui sont les paramtres avec lesquels la fonction est effectivement appele. Les paramtres formels peuvent tre de nimporte quel type. Leurs identificateurs nont dimportance qu lintrieur de la fonction. Enfin, si la fonction ne possde pas de paramtres, on remplace la liste de paramtres formels par le mot-clef void. Le corps de la fonction dbute ventuellement par des dclarations de variables, qui sont locales cette fonction. Il se termine par linstruction de retour la fonction appelante, return, dont la syntaxe est : return (expression); La valeur de expression est la valeur que retourne la fonction. Son type doit tre le mme que celui qui a t spcifi dans len-tte de la fonction. Si la fonction ne retourne pas de valeur (fonction de type void), sa dfinition sachve par return ; Plusieurs instructions return peuvent apparatre dans une fonction. Le retour au programme appelant sera alors provoqu par le premier return rencontr lors de lexcution. Le C nautorise pas les fonctions imbriques. La dfinition dune fonction secondaire doit donc tre place soit avant, soit aprs la fonction principale main. Toutefois, il est indispensable que le compilateur connaisse la fonction au moment o celle-ci est appele. Si une fonction est dfinie aprs son premier appel (en particulier si sa dfinition est place aprs la fonction main), elle doit imprativement tre dclare au pralable. Une fonction secondaire est dclare par son prototype, qui donne le type de la fonction et celui de ses paramtres, sous la forme : type nom-fonction(type-1,...,type-n);

II- Appel dune fonction


Lappel dune fonction se fait par : nom-fonction(para-1,para-2,...,para-n) Lordre et le type des paramtres effectifs de la fonction doivent concorder avec ceux donns dans len-tte de la fonction. Les paramtres effectifs peuvent tre des expressions.

III- Variables globales et variables locales


On appelle variable globale une variable dclare en dehors de toute fonction. Une variable globale est connue du compilateur dans toute la portion de code qui suit sa dclaration. On dit quelle est permanente. Les variables globales sont statiques et son alloues dans le segment de donnes. On appelle variable locale une variable dclare lintrieur dune fonction (ou dun bloc dinstructions) du programme. Par dfaut, les variables locales sont temporaires. Quand une fonction est appele, elle place ses variables locales dans le segment de pile. A la sortie de la fonction, les variables locales sont dpiles et donc perdues. Les variables locales nont en particulier aucun lien avec des variables globales de mme nom.

Transmission des paramtres dune fonction


Les paramtres formels peuvent tre transmis par valeur ou par adresse. Pour une transmission par adresse, le paramtre formel doit tre prcd par *. Exemples int minimum(int a, int b) ; //a et b sont des paramtres formels par valeur void echange(int *a, int *b) ; // a et b sont des paramtres formels par adresse Les paramtres formels transmis par valeur dune fonction sont traits de la mme manire que ses variables locales : lors de lappel de la fonction, les paramtres effectifs sont copis dans le segment de pile. La fonction travaille alors uniquement sur cette copie. Cette copie disparat lors du retour au programme appelant. Cela implique en particulier que, si la fonction modifie la valeur dun de ses paramtres, seule la copie sera modifie; la variable du programme appelant, elle, ne sera pas modifie. Les paramtres formels transmis par adresse dune fonction sont substitus par des variables du programme appelant, celles-ci doivent tre prcdes par loprateur &. La fonction travaille alors directement sur ses variables et toute modification dun paramtre dans le corps de la fonction se rpercute sur la variable le remplaant.

Page 15

Vous aimerez peut-être aussi