Vous êtes sur la page 1sur 64

CHAPITRE 1

Notions de base du langage C


Mme BOUTOUMI
Disponible sur:

Plan du cours
1. Le compilateur C
2. Structure d'un programme
3. L'environnement du programme
Les identificateurs
Les types
Dclaration de constantes
Dclaration de variables
Dclaration de types
4. Le corps du programme
Lexpression
Loprateur d'affectation
Les oprateurs: arithmtiques, logiques, relationnelles, priorit des oprateurs
Les instructions
Les fonctions
5. Les objets structurs
6. La directive typedef
7. Les entres / sorties simple
8. Les pointeurs

1. Le compilateur C
Historique
Le langage C est apparu au cours de l'anne 1972 dans les Laboratoires Bell par Dennis
RITCHIE et Ken Thomson dans le but de dvelopper UNIX. Le C est devenu un standard, et
est normalis par lANSI (American National Standard Institute) depuis 1982. Cest un
langage compil donc rapide, mais assez portable. Cest un langage impratif.
Compilateur
Un compilateur sert traduire un code source crit dans un langage de programmation en un
autre langage, appel code objet (Assembleur ou code machine).

ENVIRONNEMENT DE DVELOPPEMENT
Un environnement de dveloppement intgr (EDI ou IDE en anglais pour Integrated
Development Environment) est un programme regroupant un ensemble d'outils pour le
dveloppement de logiciels. En rgle gnrale, un EDI regroupe un diteur de texte, un
compilateur, un dbogueur. Parmi les IDE les plus connus:
Visual C++ est un EDI Windows conu par Microsoft pour les langages de programmation C
et C++. Il fait partie de la suite de logiciels Visual Studio.
Code::Blocks est un EDI libre, gratuit pour le c et le C++ , fonctionne sous Windows, Linux et
Mac.
IDE Xcode qui fonctionne uniquement sur Mac OS X.

Code::Blocks
Tlcharger Code::Blocks http://www.codeblocks.org/downloads/binaries

2. Structure d'un programme

Directives de prprocesseur
#include <------------>
#include ------------
//ceci est un commentaire qui tient sur une seule ligne
#define.
/*ceci est un commentaire
sur plusieurs
ligne*/
Dclarations globales
De types : Typedef Def_Type
variables simples
variables composs (tableaux,structures,)
fonctions(prototype): entte
Void Main() /* Programme principal ou fonction principale */
{
Dclarations locales au bloc
Instructions (Expression suivie dun ;Structure de contrle)
}
Fonctions ( /*Fonctions dclares en prototypes*/
{
Dclarations locales au bloc
Instructions (Expression suivie dun ;Structure de contrle)
}

Conseils : - indentez votre code (tabulation), - commentez votre code.

Exemple de programme en c
#include <stdio.h> /*Directives de
prcompilation*/
void affiche_calcul(float x,float x); /*prototype*/
float produit(float r,float s); /* prototype */
int glob; /*dclration de variables globales*/
int main(void) /* programme principal */
{
float a,b; /* dclaration locale */
glob=0;
puts("veuillez entrer 2 valeurs");
scanf("%f %f",&a,&b);
affiche_calcul(a,b);
printf("nombre d'appels produit :
%d\n",glob);
}

/* Implmentation des fonctions */


float produit(float r float s)
r, {
glob++;
return(r*s);
}
void affiche_calcul(float x,float y)
{
float vloc;
vloc=produit(x,y);
vloc=produit(vloc,vloc);
printf("le carr du produit est %f\n",vloc);
}

3. L'environnement du programme
Les identificateurs
Ils permettent de rfrencer les diffrents objets du C:
Constantes, variables et les fonctions.
Ils sont composs d'une suite de lettres et de chiffres.
Le premier caractre doit tre une lettre ou le symbole _
L'ensemble des symboles utilisables est donc :{0, 1, 2, ..., 9, A, B,
..., Z, _ , a, b,...,z}
Le C est sensible la casse (distingue les majuscules et les
minuscules)
La longueur des identificateurs n'est pas limite , mais C
distingue seulement les 31premiers caractres.
Il est dconseill d'utiliser le symbole '_ comme premier
caractre pour un identificateur, car il est souvent employ pour
dfinir les variables globales de l'environnement C.
Certains noms sont rservs par le langage.

3. L'environnement du programme
Les constantes
La constante est une valeur qui apparat littralement dans le
code source d'un programme, le type de la constante tant
dtermin par la faon dont la constante est crite. Les
constantes peuvent tre de 4 types : entier, flottant, caractre: 3
, 10, a,\0,\n, 2.3.
Les constantes nommes.
Syntaxe de dclaration constante
Const type identificateur = valeur;
Par exemple : const int n = 10;

Les constantes nommes sont donnes soit par le prprocesseur


soit par des numrations.
Syntaxe de dclaration constante

Syntaxe de dclaration constante

#define identificateur reste-de-la-ligne


Par exemple : #define PI3.1415

Enum { liste didentificateurs } ;


Par exemple: enum{rouge, vert, bleu};

3. L'environnement du programme
Les types
Le C est un langage typ. Car toute variable, constante ou
fonction est d'un type prcis. Le type d'un objet dfinit la
faon dont il est reprsent en mmoire.
Quand une variable est dfinie, il lui est attribu une adresse.
Cette variable correspondra une zone mmoire dont la
longueur (le nombre d'octets) est fixe par le type (sizeof).
La taille mmoire correspondant aux diffrents types et
dpend des compilateurs.

3. L'environnement du programme
Les types
Type
simple

Type correspondant

Nombres stockables

Rservation

char

caractre (entier de petite


taille)

-128 127

1 octets

int

entier

-2 147 483 648 2 147 483 647

2 octets

float

nombre flottant (rel) en


simple prcision

- 3.4 X 10 puissance 38 3.4 X 10 puissance 38

4 octets

Double

nombre flottant (rel) en


double prcision

- 1.7X 10 puissance 308 1.7 X 10 puissance


308

8 octets

o Ces types peuvent par ailleurs tre qualifies par les qualificateurs
suivants:
short format plus court que le type de base
long format plus long que le type de base
signed nombre sign
unsigned nombre non sign
o Il existe aussi: void qui reprsente en fait une absence de type, le type
pointeur reprsente ladresse des variables en mmoire.

3. L'environnement du programme
Les types composes : Type numr
Le mot cl enum permet de crer des types numrs c'est a dire des sous
ensembles d'entiers.
Exemple
enum booleen {FALSE, TRUE);
enum booleen test;
test=FALSE;
dfini un type enum boolen qui associe a l'identificateur FALSE la valeur 0 et
a l'identificateur TRUE la valeur 1. On peut ensuite dclarer des variables de
ce nouveau type et leur affecter des valeurs:

Exemple
enum couleurs {bleu, blanc,rouge};
enum mois {jan=1, fev, mars, avr, mai, juin, juil, aout, sept, oct, nov, dec};

3. L'environnement du programme
Dclaration de variables
Les donnes d'un programme sont stockes en
mmoire et sont manipules par l'intermdiaire
d'identificateurs de variables.
Syntaxe
Type identificateur_ de_variable [= initialisation] ;
Exemples

int x,y=2,z; /* seul y est initialis */


int X=3, Y=2*X;

4. Le corps du programme
Lexpression
Une expression reprsente une donne qui
possde une valeur. On parle d'valuation d'une
expression.
Une expression peut tre simplement un
identificateur de constante, un identificateur de
variable, ou un littral constant.
Elle peut tre galement un ensemble
d'identificateurs de constantes, de variables, ou
des littraux constants relis par des oprateurs.

4. Le corps du programme
Les oprateurs
L'affectation
Oprateur daffectation

Identificateur_de_variable

= expression

4. Le corps du programme
Les oprateurs arithmtiques: +, -, *, /, %
Les oprateurs dincrmentation et de dcrmentation: ++ et - Les oprateurs daffectations composes: oprateur=
X = I++

passe d'abord la valeur de I X et incrmente aprs

X = I

passe d'abord la valeur de I X et dcrmente

X = ++I

incrmente d'abord et passe la valeur incrmente X

X = I

dcrmente d'abord et passe la valeur dcrmente X

I++ ou ++I

pour l'incrmentation (augmentation d'une unit)

I ou I

pour la dcrmentation (diminution d'une unit)

X += val

Additionne x val et stocke la somme dans X

X -= val

Soustrait de X val et stocke la diffrence dans la variable

X *= val

multiplie X et val et stocke le produit dans la variable

X /= val

divise X par val stocke le quotient dans la variable

X %= val

divise X par val et stocke le reste dans la variable

4. Le corps du programme
Les oprateurs relationnels (de comparaison)
Syntaxe
expression1 oprateur expression2

Oprateur

Dnomination

>

strictement suprieur

>=
<

suprieur ou gal
strictement infrieur

<=

infrieur ou gal

==
!=

gal
diffrent

4. Le corps du programme
Les oprateurs logiques
Oprateur

Nature

Dnomination

&&
||

boolen
boolen

Et logique
Ou logique

boolen

Ngation logique

&

Bit bit

ET bit--bit

|
^
~
<<
>>

Bit bit
Bit bit
Bit bit
Bit bit
Bit bit

OU bit--bit (ou inclusif )


OU bit--bit exclusif
complment 1
dcalage gauche
dcalage droite

4. Le corps du programme
Autres Oprateurs
expression1, expression2, ... , expressionN
La virgule ,
Cette expression est alors value de gauche droite. Sa valeur
sera la valeur de l'expression de droite.
Exemple
main()
{
int a, b;
b = ((a = 3), (a + 2));
printf("\n b = %d \n",b);
}
imprime b = 5.

4. Le corps du programme
Autres Oprateurs
L'oprateur conditionnel ternaire ?
Syntaxe
(condition) ? expression1 : expression2

Cette expression est gale expression1 si condition est


satisfaite, et expression2 sinon.
Exemples
(x >= 0) ? x : -x ;//la valeur absolue d'un nombre
m = ((a > b) ? a : b); //affecte m le maximum de a et de b.

4. Le corps du programme
Autres Oprateurs
L'oprateur de conversion de type cast
Syntaxe
(type) objet

L'oprateur permet de modifier explicitement le type d'un objet.


Exemple
main()
{
int i = 3, j = 2;
printf("%f \n",(float)i/j);
}
retourne la valeur 1.5.

4. Le corps du programme
Autres Oprateurs
L'oprateur adresse &
Syntaxe
&objet

L'oprateur appliqu une variable retourne


l'adresse mmoire de cette variable.
Exemples
int i, a[2];
&i
/* adresse de i */
&(a[1]) &a[1] /* adresse de a[1] */
&a &(i+1) /* invalides */

4. Le corps du programme
Priorit des oprateurs
Forte priorit

Faible priorit

Oprateur

Dsignation

[]

accs dans un tableau

++ --

incrmentation et dcrmentation

drfrencement de pointeur

&

oprateur dadresse

*/ %

oprateurs multiplicatifs

+-

oprateurs additifs

< > >= <= == !=

oprateurs de comparaison

|| &&

oprateurs boolens

oprateurs daffectation et
daffectation compose

oprateur=

4. Le corps du programme
Les instructions: IF ELSE
Syntaxe IF ELSE
If (expression) instruction1;
If (expression) instruction1; else instruction2 ;

Exemples
If (a>b) max= a ; else max =b ;
If (a>b)
{ if (c<d)
max= a ;
}
else max =b ;

4. Le corps du programme
Les instructions: FOR
Syntaxe de FOR
for ( expression1 ; expression2 ; expression3 ) instruction;

Expression 1 valeur initiale ; Expression 2 valeur de fin ; Expression 3


incrmentation

Exemple:
Exemple
for (i=0;i<100;i++)
{
printf(" %d \n",i*i);
s+=i;
}

for (i=0, j=0;i +j<100;i++, j++)


{
printf( %d\n ,i*j);
s+=i*j;
}

4. Le corps du programme
Les instructions: WHILE
Syntaxe WHILE
While (expression logique) instruction;

Exemple
i=0;
While (i<100)
{
printf( %d ,i*i);
s+=i;
i++ ;
}

4. Le corps du programme
Les instructions: DO WHILE
Syntaxe Do while
Do
instruction;
While (expression logique) ;
Exemple:
i=0;
Do {
printf( %d ,i*i);
s+=i;
i++ ;
} (While (i<100) ;

4. Le corps du programme
Les instructions: SWITCH
Syntaxe de Switch

SWITCH (expression)
{
case Constante_1 : liste d'instructions 1; Break;
case Constante_2 : liste d'instructions 2; Break;
.
case Constante_n : liste d'instructions n; Break;
Default : liste d'instructions;
}

L'instruction default est facultative.

4. Le corps du programme
Les instructions: SWITCH
Exemple:
int main()
{
int c;
printf("\n entrer un nombre ");
scanf("%d",&c);
switch(c)
{
case 1: printf("\n un"); break;
case 2 : printf("\n deux"); break;
case 3 : printf("\n trois"); break;
default : printf("\n autre chose");
}
printf("\n");

4. Le corps du programme
autres instructions: Break
Exemple
main()
{
int i;
for(i=0;i<5;i++)
{
printf("i=%d\n",i);
if(i==3)
break;
}
printf("valeur de i a la sortie de la boucle = %d\n", i);
}

i=0
i=1
i=2
i=3
valeur de i la sortie de la boucle = 3

4. Le corps du programme
autres instructions: Continue
continue saute la prochaine itration de la boucle. La
condition darrt est teste.
Exemple

main()
{
int i;
for(i=0;i<5;i++)
{
if(i==3) continue;
printf("i=%d\n",i);
}
printf("valeur de i a la sortie de la boucle =%d\n",i);
}

i=0
i=1
i=2
i=4
valeur de i a la sortie de la boucle = 5

4. Le corps du programme
autres instructions: Goto
Le branchement non conditionnel goto n permet d'effectuer un
saut jusqu' l'instruction tiquette correspondant. Elle est
proscrire de tout programme C digne de ce nom. Elle nest
jamais recommande.
Exemple
int main() {
start:
int d;
/* ... */
goto start;
/* ... */
return 0;
}

4. Le corps du programme
autres instructions: Return
Linstruction return provoque labandon de la
fonction en cours et le retour la fonction
appelante.
return<expression>; ou return;

4. Le corps du programme
Les fonctions
Fonction : bloc dinstruction, nomm, avec
arguments et valeur de retour.
type nom_fonction(type1 arg1, type2 arg2, ..., typeN argN)
{
[dclarations de variables locales]
liste dinstructions
}

4. Le corps du programme
Les fonctions
Fonction : bloc dinstruction, nomm, avec arguments et valeur de retour.

type nom_fonction(type1 arg1, type2 arg2, ..., typeN argN)


{
[dclarations de variables locales]
liste dinstructions
}
Nom de la fonction.
Nimporte quel identificateur non dj utilis convient

4. Le corps du programme
Les fonctions
Fonction : bloc dinstruction, nomm, avec arguments et valeur de retour.

type nom_fonction(type1 arg1, type2 arg2, ..., typeN argN)


{
[dclarations de variables locales]
liste dinstructions
}
Nom des arguments formels de la fonction,
spars par des virgules ,

4. Le corps du programme
Les fonctions
Fonction : bloc dinstruction, nomm, avec arguments et valeur de retour.

type nom_fonction(type1 arg1, type2 arg2, ..., typeN argN)


{
[dclarations de variables locales]
liste dinstructions
}
Type de chaque argument formel.

4. Le corps du programme
Les fonctions
Fonction : bloc dinstruction, nomm, avec arguments et valeur de retour.

type nom_fonction(type1 arg1, type2 arg2, ..., typeN argN)


{
[dclarations de variables locales]
liste dinstructions
}
Type de la valeur renvoye par la fonction,
ou void si la fonction ne renvoie pas de valeur.

4. Le corps du programme
Les fonctions
Exemple table de multiplication
#include <stdio.h>
void table(int x,int max)
{
int y=1;
while (y<max) {
printf("%i x %i = %i\n",x,y,x*y);
y++;
}
}
int main()
{
table(3,10);
table(4,10);
return 0;
}

4. Le corps du programme
Les fonctions
Appel de fonction : instruction termine par ;

nom(expr1,expr2,...,exprN) ;

value les expressions expr1 exprN,


Cre des variables locales arg1 argN,
Initialise chaque argi la valeur de expri (conversion implicite ventuelle),
Excute les instructions de la fonction,
Dtruit les variables locales arg1 argn.
Si type nest pas void, la fonction doit retourner une valeur return expr ;
Dans une fonction void, return ; quitte immdiatement la fonction,

4. Le corps du programme
Les fonctions
Toute fonction doit tre dclare avant d'tre appele.
On peut dclarer une fonction sans la dfinir, par son
prototype :
type nom(type1 arg1, type2 arg2, ..., typeN argN) ;

Le corps de la fonction nest pas fourni et remplac par ;


Il faut quand mme prciser tous les types,
Le prototype se place dans les dclarations globales.

4. Le corps du programme
Les fonctions: main
Tout programme C doit contenir une fonction appele main. Cest
une fonction comme les autres. Par convention, la fonction main
renvoie un code de retour :
il est de type int .
la convention est de retourner 0 si tout se passe bien.
les parenthse de return sont facultatives.
le code de retour est exploitable depuis le shell.
le type de main peut tre void tolr par le compilateur.
La fonction main peut galement possder des paramtres
formels.

4. Le corps du programme
Les fonctions: Procdure
Le langage C ne comporte pas le concept de procdure.
Les fonctions pouvant raliser sans aucune restriction tout effet
de bord qu'elles dsirent.
On peut raliser une procdure l'aide d'une fonction.
Pour exprimer l'ide de << aucune valeur >>, on utilise le mot
cl void. Une procdure sera donc implmente sous la forme
d'une fonction retournant void et dont la partie liste
d'instructions ne comportera pas d'instruction return.

4. Le corps du programme
Les fonctions: Procdure
Exemple de procdure
void print_add(int i,int j) /* la procdure et ses paramtres formels */
{ int r;
/* une variable locale print_add */
r = i + j;
...
/* instruction pour imprimer la valeur de r
*/
}
void prints(void) /* une procdure sans paramtres */
{ int a,b;
/* variables locales prints */
a = 12; b = 45;
print_add(a,b);
/* appel de print_add */
print_add(13,67); /* un autre appel print_add */
}

5. Les objets structurs


Le Tableau: squence de variable de mme type.
Syntaxe de dclaration dune variable tableau

type identificateur_table [taille] ;


taille doit tre une expression constante i.e., qui ne fait pas intervenir de
variable,
Exemples de dclaration
int tab[10]; /* 10 entiers */
double Dalmatiens[10*10+1]; /* 101 flottants */
int n,t[n+2]; /*invalide*/

5. Les objets structurs


Le Tableau:
Laccs un lment du tableau par loprateur [].
Les lments dun tableau sont toujours numrots de 0 taille
-1.
Exemples de dclaration
Exemple
int a[10];
for (i=0; i<10; i++) a[i] = i*(i+1);
for (i=0; i<10; i++) printf("%i ",a[9-i]);

Attention :
Ne jamais accder un tableau en dehors de ses bornes.
Un tableau ne peut pas figurer gauche dun oprateur dune
affectation. Tab1=Tab2

5. Les objets structurs


Le Tableau: Avant affectation, le contenu du
tableau est alatoire.
Syntaxe de dclaration avec initialisation
type identificateur_table[taille] = { expr1, ..., exprN } ;

N <= taille.
si 1N<taille, les initialiseurs manquants sont mis 0,
si taille est omise, elle est fixe N.
Exemples

int tab[10]= { 2,10,8,66,4 } ; // les 5 cases non initialises sont mis a 0


int tab[]={2,10,8,66,4}; //cration dun tableau de 5 cases

5. Les objets structurs


Le Tableau multidimensionnel: tableau de tableaux
ou matrices
Syntaxe de dclaration
Type identificateur_matrice [taille1][taille2] [tailleN] ;
Type identificateur_matrice [taille1][taille2] [tailleN] ={{a1,..,ataille1},{a2,..,ataille2},..,{aN,..,atailleN}}

Pas de limite au nombre de dimensions, la seule limitation est la taille


mmoire.
si 1N<taille, les initialiseurs manquants sont mis 0,
si taille est omise, elle est fixe N.

Accs
Identificateur_matrice [expr1][expr2] [exprN]

5. Les objets structurs


Le Tableau multidimensionnel:
Exemple

double mat[4][4];
int i,j;
for (i=0;i<4;i++)
for (j=0;j<4;j++)
mat[i][j] = (i==j) ? 1. : 0.;

Exemple

int a[2][3] = { { 1,0,1 }, { 0,1,0 } };

5. Les objets structurs


Le Tableau :

Les tableaux sont passs par rfrence, pas par valeur.


Une fonction ne peut pas retourner de tableau.

Exemple
void zero(int a[4]);
int main()
{
int tmp[4];
zero(tmp);
return 1;
}
void zero(int a[4])
{
int i;
for (i=0;i<4;i++) a[i] = 0; /* modifie tmp */
}

5. Les objets structurs


Les structures: la structure Permet de grouper un nombre
fixe de valeurs de type diffrent dans une seule variable.
Syntaxe de dclaration

Exemple de dclaration

struct mastruct {
type1 champ1 ;
.
.
.
typeN champN ;
};

Struct fiche {
int numero;
char nom[32],
prenom [32];
};

Syntaxe

struct mastruct identificateur_de_variable ;

Exemple de dclaration
variable structur

Struct fiche a,b;

5. Les objets structurs


Les structures:
Syntaxe de laccs

Identificateur_variable.champ
Exemple daccs

Struct fiche a,b;


a.numero=12;
a.nom=Ben ali;
a.prenom=Mohamed; // ou bien
a={12, Ben ali, Mohamed };
b=a; //Initialisation par recopie

5. Les objets structurs


Les unions:
Les unions constituent un autre type de structure. Elles sont
dclares avec le mot cl union, qui a la mme syntaxe
que struct.
La diffrence entre les structures et les unions est que les
diffrents champs d'une union occupent le mme espace
mmoire. On ne peut donc, tout instant, n'utiliser qu'un
des champs de l'union.
Les unions sont assez peu utilises, sauf en programmation
systme o l'on doit pouvoir interprter des donnes de
diffrentes manires selon le contexte.

5. Les objets structurs


Les unions:
Exemple
union entier_ou_reel {
int entier;
float reel;
};
main()
{
union entier_ou_reel x;
x.entier=2; //affecte la valeur 2 x.entier, ce qui dtruit x.reel
x.reel=6.546; /*la valeur de x.entier est perdue, car le rel 6.546 a t
stock au mme emplacement mmoire que l'entier x.entier*/
}

6. La directive typedef
Le C dispose d'un mcanisme de cration de synonymes et des
types complexes. Le mot cl utiliser est typedef.
Syntaxe

Exemple

typedef type synonyme;

Exemple
typedef unsigned int mot;
typedef int tab[10];
main()
{
mot a;
tab t;

struct complexe
{
double reelle;
double imaginaire;
};
typedef struct complexe complexe;
main()
{
complexe z;
...
}

7. Les entres / sorties simple


SCANF: lit au clavier des entiers, flottants, etc :
Syntaxe
Scanf (Format, &identificateur_var1,.., &identificateur_varn)

Format: chane de caractres indiquant sous forme de


squences dchappement les entits que scanf lit sur
lentre standard
Squences dchappement: %c caractre %d entier
dcimal %x entier hexadcimal.
&identificateur_vari est l'adresse de la variable.
int i,j;
scanf(%d %d ,&i,&j);

7. Les entres / sorties simple


PRINTF: Permet sur cran
Dafficher du texte.
Dafficher la valeur dexpressions entires ou flottantes.
Syntaxe
Printf (Format, liste_dexpressions)

Format : chane de caractres entre guillemet imprimer dans


lequel on met des squences dchappement qui indiquent les
formats selon les quels on veut imprimer la valeur des expressions
Squences dchappement : %c caractre %d entier dcimal %x
entier hexadcimal %f flottant.

7. Les pointeurs
On peut dclarer des variables de type type*:
Syntaxe De dclaration dun pointeur
type* identificateur;

Le drfrencement : cest laccs lobjet pointe par


identificateur.
Syntaxe

*expr

Effectuer des oprations limites sur les adresses (=, +, -,++, --, ==).
NULL : valeur pointeur spciale dfinie dans #include <stdlib.h>,
de type gnrique void* , garantie de ne jamais pointer vers une
adresse valide

7. Les pointeurs
Exemple
int i,tab[3]={1,2,3};
float j;
int* p; /* pointeur sur une variable entire*/
p = &i; /*p pointe sur i , &i pour type int* */
printf (%d,*p); /* imprime la valeur de la variable i ,
drfrencement*/
p = &tab[1]; /*p pointe sur la 2 case de tab*/
p = &f; /* non dfini */
p = &(i+1); /* invalide */

7. Les pointeurs
Utilit des pointeurs : sert
Passer des variables par rfrence (passage par
variable).
Simuler le retour de plusieurs valeurs.
Lire les des donnes entres au clavier (fonction
scanf).
Manipulation des tableaux.
Manipuler des chanes de caractres.
Grer des blocs de mmoire dynamique (cours
sur les LLC)

7. Les pointeurs
Passer des variables par rfrence (passage par
variable)
Exemple
void mul2(double* d) /* par rfrence */
{
*d *= 2; /* double le contenu de d */
}
double power(double arg, int n) /* par valeur */
{
for ( ; n>0; n-- ) mul2(&arg); /* double arg */
return arg;
}
void test()
{
double f = 12.;
double g = power(f, 10); /* f non modifi */
}

7. Les pointeurs
Simuler le retour de plusieurs valeurs
Exemple
void divise(int a, int b, int* div, int* rem)
{
*div = a / b;
*rem = a % b;
}
void f()
{
int x, y;
divise( 100, 10, &x, &y );
}

7. Les pointeurs
Manipulation des tableaux
Exemple: manipulation de tableau
avec pointeur

Exemple: une autre faon de manipulation


du tableau avec pointeur

#defineN5
inttab[5]={0,1,4,20,7};
main()
{
inti;
int*p;
p=tab;
for(i=0;i<N;i++)
{
printf("%d\n",*p);
p++;
}
}

#defineN5
inttab[5]={0,1,4,20,7};
main()
{
inti;
int*p;
p=tab;
for(i=0;i<N;i++)
printf("%d\n",p[i]);
}

7. Les pointeurs
Manipulation des tableaux
Exemple de tableau dynamique

Exemple de tableau dynamique initialis 0

#include<stdlib.h>
main()
{
intn;
int*tab;
...
tab=(int*)malloc(n*sizeof(int));
...
free(tab);
}

#include<stdlib.h>
main()
{
intn;
int*tab;
...
tab=(int*)calloc(n,sizeof(int));
...
free(tab);
}

7. Les pointeurs
Manipuler des chanes de caractres
Chane (string) = suite de caractres termine par le caractre \0.
En C, pas de type chane spcifique :
dclaration : on utilise un tableau de char : char[].
en argument : on passe un pointeur dans un tableau : char*.
Exemples
char cc[] = { H, e, l, l, o, !, 0 };
char toto[4] = { H, i, \0 };
char titi[4] = { H, i };
char cc[] = "Hello!";
char toto[4] = "Hi";

int long(const char* s)


{
int i = 0;
while (s[i]) i++;
return i;
}

char en_majuscule(char c)
{
if ( c >= a && c <= z )
return c - a + A;
else
return c;
}
void
chaine_en_majuscule(char* s)
{
for ( ; *s; s++ )
*s = en_majuscule(*s);
}