Académique Documents
Professionnel Documents
Culture Documents
Partie 01
1
Plan du cours (1)
1. Introduction
5. Les tableaux
6. Les pointeurs
2
Langages informatiques
Un langage informatique est un outil permettant de
donner des ordres (instructions) la machine
3
Langage machine
Langage binaire: linformation est exprimeet manipule sous
forme dune suite de bits
Le code ASCII (American Standard Code for Information Interchange) donne les
correspondances entre les caractres alphanumriques et leurs
reprsentation binaire, Ex. A= 01000001, ?=00111111
4
L'assembleur
Problme: le langage machine est difficile comprendre par
l'humain
6
Compilateur/interprteur
Compilateur: traduire le programme entier une fois pour toutes
Compilateur excution
exemple.c exemple
fichier source fichier excutable
+ plus rapide lexcution
+ scurit du code source
- il faut recompiler chaque modification
Exemples de langages:
Fortran, Cobol, Pascal, C,
C++, Java,
8
Historique du C
Le langage C a t conu en 1972 dans Bell Laboratories par
Dennis Ritchie avec lobjectif dcrire un systme d'exploitation
(UNIX).
9
Caractristiques du C
Universel : n'est pas orient vers un domaine d'application particulier
(applications scientifiques, de gestion, )
10
Programme source, objet et excutable
Un programme crit en langage C forme un texte quon nomme
programme ou code source, qui peut tre form de plusieurs fichiers
sources
Ce fichier objet nest pas excutable tel quel car il lui manque les
instructions excutables des fonctions standards appeles dans le fichier
source (printf, scanf, ) et ventuellement dautres fichiers objets
12
Composantes dun programme C
Directives du prprocesseur
inclusion des fichiers d'en-tte (fichiers avec extension .h)
dfinitions des constantes avec #define
13
Remarques sur ce premier programme
#include<stdio.h> informe le compilateur dinclure le fichier stdio.h qui
contient les fonctions dentres-sorties dont la fonction printf
14
Chapitre 2
15
Les variables
Les variables servent stocker les valeurs des donnes
utilises pendant lexcution dun programme
un nom (Identificateur)
un type (entier, rel, )
(Les types de variables en C seront discuts par la suite)
16
Les identificateurs
Le choix dun identificateur (nom dune variable ou dune fonction) est
soumis quelques rgles :
doit tre diffrent des mots rservs du langage : auto break case char
const continue default do double else enum extern float for
goto if int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
17
Les types de base
Le type dune variable dtermine lensemble des valeurs quelle peut prendre
et le nombre d'octets lui rserver en mmoire
En langage C, il ny a que deux types de base les entiers et les rels avec
diffrentes variantes pour chaque type
Remarques:
Un type de base est un type pour lequel une variable peut prendre une seule
valeur un instant donn contrairement aux types agrgs
Le type boolen nexiste pas. Un boolen est reprsent par un entier (un
entier non nul quivaut vrai et la valeur zero quivaut faux)
18
Types Entier
4 variantes dentiers :
char : caractres (entier sur 1 octet : - 128 127)
short ou short int : entier court (entier sur 2 octets : - 32768 32767)
int : entier standard (entier sur 2 ou 4 octets )
long ou long int : entier long (4 octets : - 2147483648 2147483648)
Remarque : Une variable du type char peut subir les mmes oprations que les
variables du type short, int ou long
19
Types Rel
3 variantes de rels :
20
Dclaration des variables
Les dclarations introduisent les variables qui seront utilises,
fixent leur type et parfois aussi leur valeur de dpart (initialisation)
Syntaxe de dclaration en C
<Type> <NomVar1>,<NomVar2>,...,<NomVarN>;
Exemple:
int i, j,k;
float x, y ;
double z=1.5; // dclaration et initialisation
short compteur;
char c=`A`;
21
Dclaration des constantes
Une constante conserve sa valeur pendant toute lexcution dun programme
le mot cl const :
const type nom = expression ;
Dans cette instruction la constante est type
exemple : const float Pi =3.141592
(Rq: Lintrt des constantes est de donner un nom parlant une valeur, par exemple
NB_LIGNES, aussi a facilite la modification du code)
22
Constantes entires
On distingue 3 formes de constantes entires :
23
Remarques sur les constantes entires
24
Constantes relles
On distingue 2 notations :
notation dcimale Ex : 123.4, .27, 5.
Remarques :
Les constantes relles sont par dfaut de type double
25
Les constantes caractres
Se sont des constantes qui dsignent un seul caractre,
elles sont toujours indiques entre des apostrophes, Ex :
b, A, ?
26
Expressions et oprateurs
Une expression peut tre une valeur, une variable ou une opration
constitue par des valeurs, des constantes et des variables relies
entre eux par des oprateurs
exemples: 1, b, a*2, a+ 3*b-c,
Un oprateur est un symbole qui permet de manipuler une ou
plusieurs variables pour produire un rsultat. On distingue :
27
Oprateurs en C
Le langage C est riche en oprateurs. Outre les oprateurs
standards, il comporte des oprateurs originaux daffectation,
dincrmentation et de manipulation de bits
28
Oprateurs arithmtiques
binaires : + - * / et % (modulo) et unaire : -
Les oprandes peuvent tre des entiers ou des rels sauf pour % qui
agit uniquement sur des entiers
29
Conversions implicites
Les types short et char sont systmatiquement convertis en int
indpendemment des autres oprandes
30
Exemple de conversion
Exemple : n * p + x (int n ; long p ; float x)
n * p + x
* multiplication par p
+ addition
31
Oprateur daffectation simple =
Loprateur = affecte une valeur ou une expression une variable
Exemple: double x,y,z; x=2.5; y=0.7; z=x*y-3;
Le terme gauche de laffectation est appel lvalue (left value)
32
Oprateurs relationnels
Oprateurs
< : infrieur <= : infrieur ou gal
> : suprieur >= : suprieur ou gal
== : gal != : diffrent de
&& retourne vrai si les deux oprandes sont vrais (valent 1) et 0 sinon
Exemple : 5 && 11 1
!13.7 0
34
valuation de && et ||
Le 2me oprande est valu uniquement en cas de ncessit
a && b : b valu uniquement si a vaut vrai (si a vaut faux,
valuation de b inutile car a && b vaut faux)
a b : b valu uniquement si a vaut faux (si a vaut vrai,
valuation de b inutile car a b vaut vrai)
Exemples
if ((d != 0) && (n / d == 2)) : pas de division si d vaut 0
if ((n >=0) && (sqrt(n) < p)) : racine non calcule si n < 0
Lintrt est dacclrer lvaluation et dviter les traitements
inappropris
35
Incrmentation et dcrmentation
Les oprateurs ++ et -- sont des oprateurs unaires permettant respectivement d'ajouter
et de retrancher 1 au contenu de leur oprande
Cette opration est effectue aprs ou avant l'valuation de l'expression suivant que
l'oprateur suit ou prcde son oprande
k = i++ (post-incrmentation) affecte d'abord la valeur de i k et incrmente aprs (k
= i++ ; k = i ; i = i+1 ; )
Exemple : i = 5 ; n = ++i - 5 ;
i vaut 6 et n vaut 1
i = 5 ; n = i++ - 5 ;
i vaut 6 et n vaut 0
36
Oprateurs de manipulations de bits
oprateurs arithmtiques bit bit :
& : ET logique | : OU logique ^ : OU exclusif ~ : ngation
Les oprandes sont de type entier. Les oprations s'effectuent bit bit
suivant la logique binaire
37
Oprateurs de dcalage de bits
Il existe deux oprateurs de dcalage :
>> : dcalage droite << : dcalage gauche
Dans le cas d'un dcalage gauche les bits les plus gauche sont
perdus. Les positions binaires rendues vacantes sont remplies par
des 0
Ex : char x=14; (14=00001110) 14<<2 = 00111000 = 56
char y=-7; (-7=11111001) -7<<2= 11100100= -28
39
Oprateurs daffectation combins
Soit un oprateur de calcul op et deux expressions exp1 et exp2.
Lexpression exp1= exp1 op exp2 peut scrire en gnral de
faon quivalente sous la forme exp1 op= exp2
Oprateurs utilisables :
-= *= /= %=
+= &=
>>= ^= |=
<<=
Exemples :
a=a+b scrit : a+=b
n=n%2 scrit : n%=2
x=x*i scrit : x*=i
p=p>>3 scrit : p>>=3
40
Oprateur de forage de type (cast)
Il est possible deffectuer des conversions explicites ou de
forcer le type dune expression
Syntaxe : (<type>) <expression>
Exemple : int n, p ;
(double) (n / p); convertit lentier n / p en double
42
Oprateur squentiel ,
Utilit : regrouper plusieurs sous-expressions ou calculs en une seule
expression
Exemples
i++ , i + j; // on value i++ ensuite i+j (on utilise la valeur de i incrmente)
i++ , j = i + k , a + b; // la valeur de lexpression est celle de a+b
for (i=1 , k=0 ; ; ) { }
43
Oprateur SIZEOF
Syntaxe : sizeof (<type>) ou sizeof (<variable>)
fournit la taille en octets d'un type ou d'une variable
Exemples
int n;
printf ("%d \n",sizeof(int)); // affiche 4
printf ("%d \n",sizeof(n)); // affiche 4
44
Priorit et associativit des oprateurs
Une expression est value en respectant des rgles de priorit et
dassociativit des oprateurs
Ex: * est plus prioritaire que +, ainsi 2 + 3 * 7 vaut 23 et non 35
Les oprateurs dans une mme ligne ont le mme niveau de priorit.
Dans ce cas on applique les rgles dassociativit selon le sens de la
flche. Par exemple: 13%3*4 vaut 4 et non 1
45
Priorits de tous les oprateurs
Catgorie Oprateurs Associativit
rfrence () [] -> .
unaire + - ++ -- ! * & (cast) sizeof
arithmtique * / %
arithmtique + -
dcalage << >>
relationnel < <= > >=
relationnel == !=
manip. de bits &
manip. de bits ^
manip. de bits
logique &&
logique
conditionnel ?:
affectation = += -= *= /= %=
&= ^= = <<= >>=
squentiel ,
46
Chapitre 3
Entres-sorties
47
Les instructions de lecture et dcriture
Il sagit des instructions permettant la machine de dialoguer avec lutilisateur
48
Ecriture formate de donnes: printf ()
la fonction printf est utilise pour afficher lcran du texte, des
valeurs de variables ou des rsultats dexpressions.
49
Spcificateurs de format
SYMBOLE TYPE AFFICHAGE COMME
%c char caractre
50
Squences dchappement
l'affichage du texte peut tre contrl l'aide des squences
d'chappement :
\n : nouvelle ligne
\t : tabulation horizontale
\a : signal sonore
\b : retour arrire
\r : retour chariot
\v : tabulation verticale
\f : saut de page
\\ : back slash ( \ )
\ : apostrophe
\" : guillemet
51
Exemples de printf()
#include<stdio.h>
main()
{ int i=1 , j=2, N=15;
printf("la somme de %d et %d est %d \n", i, j, i+j);
printf( N= %x \n" , N);
char c='A' ;
printf(" le code Ascii de %c est %d \n", c, c);
}
Ce programme va afficher : la somme de 1 et 2 est 3
N=f
le code Ascii de A est 65
52
Exemples de printf()
#include<stdio.h>
main()
{ double x=10.5, y=2.5;
printf("%f divis par %f gal %f \n", x, y, x/y);
printf("%e divis par %e gal %e\n", x, y, x/y);
}
Ce programme va afficher :
10.500000 divis par 2.500000 gal 4.200000
1.050000e+001 divis par 2.500000e+000 gal 4.200000e+000
53
Remarques sur laffichage
Par dfaut, les entiers sont affichs sans espaces avant ou aprs
Exemples : printf("%4d" , n );
n = 20 ~~20 (~ : espace)
n=56123 56123
printf("%4X", 123); ~~7B
54
Remarques sur laffichage
Pour les rels, on peut prciser la largeur minimale de la valeur afficher et
le nombre de chiffres aprs le point dcimal.
La prcision par dfaut est fixe six dcimales. Les positions dcimales
sont arrondies la valeur la plus proche.
Exemples :
printf("%f", 100.123); 100.123000
printf("%12f", 100.123); ~~100.123000
printf("%.2f", 100.123); 100.12
printf("%5.0f", 100.123); ~~100
printf("%10.3f", 100.123); ~~~100.123
printf("%.4f", 1.23456); 1.2346
55
Lecture formate de donnes: scanf ()
la fonction scanf permet de lire des donnes partir du clavier
56
Exemples de scanf()
#include<stdio.h>
main()
{ int i , j;
scanf("%d%d", &i, &j);
printf("i=%d et j=%d", i, j);
}
Remarque : pour lire une donne du type long, il faut utiliser les spcificateurs
%ld, %li, %lu, %lo, %lx.
57
Exemples de scanf()
#include<stdio.h>
main()
{ float x;
double y;
scanf("%f %lf", &x, &y);
printf("x=%f et y=%f", x,y);
}
Remarque : pour lire une donne du type double, il faut utiliser %le ou %lf et pour
lire une donne du type long double, il faut utiliser %Le ou %Lf
58
Chapitre 4
Structures de contrle
59
Structures de contrle
Les structures de contrle dfinissent la faon avec laquelle les
instructions sont effectues. Elles conditionnent l'excution
d'instructions la valeur d'une expression
On distingue :
Les structures alternatives (tests) : permettent deffectuer des choix
cd de se comporter diffremment suivant les circonstances (valeur
d'une expression). En C, on dispose des instructions : ifelse et
switch.
60
Linstruction ifelse
Syntaxe : If (expression)
bloc-instruction1
else
bloc-instruction2
expression est value, si elle est vraie (valeur diffrente de 0), alors
bloc-instruction1 est excut. Si elle est fausse (valeur 0) alors bloc-
instruction2 est excut
61
ifelse : exemples
float a, b,
max; if (a >
b)
max = a;
else
max = b;
int a;
if ((a%2)==0)
printf(" %d est paire" ,a);
else
printf(" a est impaire ",a);
62
Imbrication des instructions if
On peut imbriquer plusieurs instructions ifelse
if (N>0)
if (A>B)
MAX=A;
else MAX=B; (interprtation 2 : si N=0 MAX ne change pas)
if(a<=0)
{if(a==0)
printf("a est nul ");
else
printf(" a est strictement ngatif ");}
else
printf(" a est strictement positif " );
64
Linstruction daiguillage switch :
Permet de choisir des instructions excuter selon la valeur dune
expression qui doit tre de type entier
la syntaxe est :
switch (expression) {
case expression_constante1 : instructions_1; break;
case expression_constante2 : instructions_2; break;
case expression_constante n : instructions_n; break;
default : instructions;
}
expression_constantei doit tre une expression constante entire
Instructions i peut tre une instruction simple ou compose
break et default sont optionnels et peuvent ne pas figurer
65
Fonctionnement de switch
expression est value
On excute aussi les instructions des cas suivants jusqu la fin du bloc
ou jusqu une instruction break (qui fait sortir de la structure switch)
66
Switch : exemple
main( )
{ char c;
switch (c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'y': printf("voyelle\n"); break ;
default : printf("consonne\n");
}
}
67
Les boucles while et do .. while
while (condition) do
{ {
instructions instructions
} } while (condition);
par contre, dans la boucle do-while ce test est effectu aprs le corps de
boucle, lequel sera alors excut au moins une fois
68
Boucle while : exemple
Un programme qui dtermine le premier nombre entier N
tel que la somme de 1 N dpasse strictement 100
main( )
{ int i, som;
i =0; som= 0;
while (som <=100)
{ i++;
som+=i;
}
printf (" La valeur cherche est N= %d\n ", i);
}
69
Boucle do .. while : exemple
Contrle de saisie d'une note saisie au clavier jusqu ce
que la valeur entre soit valable
main()
{ int N;
do {
printf (" Entrez une note comprise entre 0 et 20 \n");
scanf("%d",&N);
} while (N < 0 || N > 20);
}
70
La boucle for
for (expr1 ; expr2 ; expr3)
{
instructions
}
L'expression expr1 est value une seule fois au dbut de
l'excution de la boucle. Elle effectue linitialisation des donnes de
la boucle
71
Boucle for : remarques
for (expr1 ; expr2 ; expr3) quivaut :
{ expr1;
instructions while(expr2)
} { instructions
expr3;
}
72
Boucle for : exemple
Calcul de x la puissance n o x est un rel non nul et n
un entier positif ou nul
main ( )
{ float x, puiss;
int n, i;
{ printf (" Entrez respectivement les valeurs de x et n \n");
scanf ("%f %d" , &x, &n);
for (puiss =1, i=1; i<=n; i++)
puiss*=x;
printf (" %f la puissance %d est gal : %f", x,n,puiss);
}
}
73
Linstruction break
Linstruction break peut tre utilise dans une boucle (for, while, ou do .. while).
Elle permet darrter le droulement de la boucle et le passage la premire
instruction qui la suit
74
Linstruction continue
Linstruction continue peut tre utilise dans une boucle (for, while, ou
do .. while). Elle permet labandon de litration courante et le passage
litration suivante
{int i;
for(i=1;i<5;i++)
{printf("dbut itration %d\n " ,i);
if(i<3) continue;
printf(" fin itration %d\n " ,i);
}
} rsultat: dbut itration 1
dbut itration 2
dbut itration 3
fin itration 3
dbut itration 4
fin itration 4
75
Chapitre 5
Les tableaux
76
Tableaux
Un tableau est une variable structure compose dun nombre de
variables simples de mme type dsignes par un seul identificateur
77
Dclaration des tableaux
La dclaration d'un tableau une dimension s'effectue en prcisant le
type de ses lments et sa dimension (le nombre de ses lments) :
ainsi pour :
short A[100]; // on rserve 200 octets (100* 2octets)
char mot[10]; // on rserve 10 octets (10* 1octet)
78
Initialisation la dclaration
On peut initialiser les lments dun tableau lors de la dclaration, en
indiquant la liste des valeurs respectives entre accolades. Ex:
int A[5] = {1, 2, 3, 4, 5};
float B[4] = {-1.5, 3.3, 7e-2, -2.5E3};
Si la liste ne contient pas assez de valeurs pour toutes les
composantes, les composantes restantes sont initialises par zro
Ex: short T[10] = {1, 2, 3, 4, 5};
la liste ne doit pas contenir plus de valeurs que la dimension du
tableau. Ex: short T[3] = {1, 2, 3, 4, 5}; Erreur
79
Accs aux composantes dun tableau
L'accs un lment du tableau se fait au moyen de l'indice. Par
exemple, T[i] donne la valeur de l'lment i du tableau T
80
Tableaux : saisie et affichage
Saisie des lments dun tableau T dentiers de taille n :
for(i=0;i<n;i++)
{ printf ("Entrez l'lment %d \n ",i + 1);
scanf(" %d" , &T[i]);
}
for(i=0;i<n;i++)
printf (" %d \t",T[i]);
81
Tableaux : exemple
Calcul du nombre d'tudiants ayant une note suprieure 10 :
main ( )
{ float notes[30];
int nbre,i;
for(i=0;i<30;i++)
{ printf ("Entrez notes[%d] \n ",i);
scanf(" %f" , ¬es[i]);
}
nbre=0;
for (i=0; i<30; i++)
if (notes[i]>10) nbre+=1;
printf (" le nombre de notes > 10 est gal : %d", nbre);
}
82
Tableaux plusieurs dimensions
On peut dfinir un tableau n dimensions de la faon suivante:
float notes[20][5][2];
83
Tableaux deux dimensions (Matrices)
Syntaxe : Type nom_du_Tableau[nombre_ligne][nombre_colonne];
Ex: short A[2][3]; On peut reprsenter le tableau A de la manire
suivante :
A[0][0] A[0][1] A[0][2]
A[1][0] A[1][1] A[1][2]
84
Initialisation la dclaration dune Matrice
Linitialisation lors de la dclaration se fait en indiquant la liste des
valeurs respectives entre accolades ligne par ligne
Exemple :
float A[3][4] = {{-1.5, 2.1, 3.4, 0}, {8e-3, 7e-5,1, 2.7 }, {3.1, 0, 2.5E4, -1.3E2}};
85
Matrices : saisie et affichage
Saisie des lments dune matrice dentiers A[n][m] :
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ printf ("Entrez la valeur de A[%d][%d] \n ",i,j);
scanf(" %d" , &A[i][j]);
}
for(i=0;i<n;i++)
{ for(j=0;j<m;j++)
printf (" %d \t",A[i][j]);
printf("\n");
}
86
Reprsentation dun tableau en mmoire
La dclaration dun tableau provoque la rservation automatique par le
compilateur dune zone contigu de la mmoire.
87
Reprsentation dun tableau une
dimension en mmoire
En C, le nom d'un tableau est le reprsentant de
l'adresse du premier lment du tableau (pour un 1E05
tableau T: T=&T[0] ) T 1E06 100
89
Chapitre 6
Les pointeurs
90
Pointeurs : dfinition
Un pointeur est une variable spciale qui peut
contenir ladresse dune autre variable. .
.
.
91
Intrts des pointeurs
Les pointeurs prsentent de nombreux avantages :
92
Dclaration dun pointeur
En C, chaque pointeur est limit un type de donne (mme si la
valeur dun pointeur, qui est une adresse, est toujours un entier).
93
Oprateurs de manipulation des pointeurs
Lors du travail avec des pointeurs, nous utilisons :
un oprateur 'adresse de': & pour obtenir l'adresse d'une variable
un oprateur 'contenu de': * pour accder au contenu d'une adresse
Exemple1 :
94
Oprateurs de manipulation des pointeurs
Exemple2 : float a, *p;
p=&a;
printf("Entrez une valeur : \n");
scanf("%f ",p); //supposons quon saisit la valeur 1.5
printf("Adresse de a= %x, contenu de a= %f\n" , p,*p);
*p+=0.5;
printf ("a= %f\n" , a); //affiche a=2.0
95
Initialisation dun pointeur
A la dclaration dun pointeur p, on ne sait pas sur quel zone mmoire il
pointe. Ceci peut gnrer des problmes :
int *p;
*p = 10; //provoque un problme mmoire car le pointeur p na pas t initialis
Conseil : Toute utilisation dun pointeur doit tre prcde par une
initialisation.
On peut initialiser un pointeur en lui affectant :
96
Pointeurs : exercice
main()
{ int A = 1, B = 2, C = 3, *P1, *P2;
P1=&A;
P2=&C;
*P1=(*P2)++;
P1=P2;
P2=&B;
*P1-=*P2;
++*P2;
*P1*=*P2;
A=++*P2**P1;
P1=&A;
*P2=*P1/=*P2;
}
Donnez les valeurs de A, B,C,P1 et P2 aprs chaque instruction
97
Oprations arithmtiques avec les pointeurs
La valeur dun pointeur tant un entier, certaines oprations
arithmtiques sont possibles : ajouter ou soustraire un entier un
pointeur ou faire la diffrence de deux pointeurs
p1-p2 : Le rsultat est un entier dont la valeur est gale (diffrence des
adresses)/sizeof(T).
Remarque:
on peut galement utiliser les oprateurs ++ et -- avec les pointeurs
la somme de deux pointeurs nest pas autorise
98
Oprations arithmtiques avec les pointeurs
Exemple :
float *p1, *p2;
float z =1.5;
p1=&z;
printf("Adresse p1 = %x \n",p1);
p1++;
p2=p1+1;
printf("Adresse p1 = %x \t Adresse p2 = %x\n",p1,p2);
printf("p2-p1 = %d \n",p2-p1);
Affichage :
Adresse p1 = 22ff44
Adresse p1 = 22ff48 Adresse p2 = 22ff4c
p2-p1=1
99
Pointeurs et tableaux
Comme on la dj vu au chapitre 5, le nom d'un tableau T reprsente
l'adresse de son premier lment (T=&T[0]). Avec le formalisme pointeur, on
peut dire que T est un pointeur constant sur le premier lment du tableau.
100
Pointeurs et tableaux : exemple
Exemple: short x, A[7]={5,0,9,2,1,3,8};
short *P;
P=A;
x=*(P+5);
101
Pointeurs : saisie et affichage dun
tableau
Version 1: Version 2: sans utiliser i
main() main()
{ float T[100] , *pt; { float T[100] , *pt;
int i,n; int n;
do {printf("Entrez n \n " ); do {printf("Entrez n \n " );
scanf(" %d" ,&n); scanf(" %d" ,&n);
}while(n<0 ||n>100); }while(n<0 ||n>100);
pt=T;
for(i=0;i<n;i++) for(pt=T;pt<T+n;pt++)
{ printf ("Entrez T[%d] \n ",i ); { printf ("Entrez T[%d] \n ",pt-T );
scanf(" %f" , pt+i); scanf(" %f" , pt);
} }
for(i=0;i<n;i++) for(pt=T;pt<T+n;pt++)
printf (" %f \t",*(pt+i)); printf (" %f \t",*pt);
} }
102
Pointeurs et tableaux deux dimensions
Le nom d'un tableau A deux dimensions est un pointeur constant sur le
premier lment du tableau cd A[0][0].
103
Pointeurs : saisie et affichage dune
matrice
#define N 10
#define M 20
main( )
{ int i, j, A[N][M], *pt;
pt=&A[0][0];
for(i=0;i<N;i++)
for(j=0;j<M;j++)
{ printf ("Entrez A[%d][%d]\n ",i,j );
scanf(" %d" , pt+i*M+j);
}
for(i=0;i<N;i++)
{ for(j=0;j<M;j++)
printf (" %d \t",*(pt+i*M+j));
printf ("\n");
}
}
104
Pointeurs et tableaux : remarques
En C, on peut dfinir :
Un tableau de pointeurs :
Ex : int *T[10]; //dclaration dun tableau de 10 pointeurs dentiers
Un pointeur de tableaux :
Ex : int (*pt)[20]; //dclaration dun pointeur sur des tableaux de 20
lments
Un pointeur de pointeurs :
Ex : int **pt; //dclaration dun pointeur pt qui pointe sur des pointeurs
dentiers
105
Allocation dynamique de mmoire
Quand on dclare une variable dans un programme, on lui rserve
implicitement un certain nombre doctets en mmoire. Ce nombre est
connu avant lexcution du programme
Si on n'a plus besoin d'un bloc de mmoire rserv par malloc, alors
on peut le librer l'aide de la fonction free , dont la synatxe est :
free(pointeur);
108
10
8
malloc et free : exemple
Saisie et affichage dun tableau
printf(" Saisie du tableau \n " );
#include<stdio.h>
for(i=0;i<n;i++)
#include<stdlib.h>
{ printf ("lment %d ? \n ",i+1);
main()
scanf(" %f" , pt+i);
{ float *pt;
}
int i,n;
printf("Entrez la taille du tableau \n" );
scanf(" %d" ,&n); printf(" Affichage du tableau \n " );
for(i=0;i<n;i++)
pt=(float*) malloc(n*sizeof(float)); printf (" %f \t",*(pt+i));
if (pt==Null) free(pt);
{ }
printf( " pas assez de mmoire \n" );
system(" pause " );
}
109
10
9