Académique Documents
Professionnel Documents
Culture Documents
imen.boudali@gmail.com / imen.boudali@enit.utm.tn
2020 - 2021
29/10/2020
Plan
• Partie 1: les pointeurs
29/10/2020
Qu’est ce qu’un pointeur 84
29/10/2020
Exemple
Destruction de « a »
à la fin du « bloc »
29/10/2020
L’opérateur d’adresse « & » 86
L'instruction :
p = &c; //affecte l'adresse de c à la variable p.
29/10/2020
DECLARATION DES POINTEURS 87
29/10/2020
Contenu d’une adresse 88
char *pc;
*pc = 34 ;
printf("CONTENU DE LA CASE MEMOIRE: %c\n",*pc);
printf("VALEUR DE L'ADRESSE EN HEXADECIMAL: %p\n",pc);
29/10/2020
Pointeurs multiples 89
29/10/2020
Plan
• Partie 1: les pointeurs
29/10/2020
Les tableaux
91
Nombre indice
d’éléments
T[0] T[1] T[2] T[3] T[4]
int T[5]; T
Type des Nom
éléments
En C:
int Premiers [4]; 1. Les indices commencent par 0
Premiers [0] = 2;
2. T[i] : i+1ème élément
Premiers [1] = 3;
Premiers [2] = 5;
Premiers [3] = 7;
printf(“Le 3e nombre premier: %d\n”, Premiers [2]);
printf(“Somme du 2e et du 3e: %d”, Premiers[1]+ Premiers[2]);
Le 3e nombre premier: 5
Somme du 2e et du 3e: 8
29/10/2020
Utilisation 92
int T [4], i, x;
for (i= 0; i< 4; i++)
{
printf ("Donnez l'élément n°:%d", i);
scanf (“%d”, &x); scanf (“%d”, &T[i]);
T[i] = x;
}
On peut initialiser un tableau lors de sa déclaration
Et même:
int Tpremiers [] = {2, 3, 5, 7};
29/10/2020
Exercice: Comparer le contenu de deux tableaux?
95
#include <stdio.h>
void main ()
{
float T1 [4] = {2, 3, 5, 7}, T2 [4];
int i; int Egaux;
Egaux = 1; i = 0;
while ((i < 4) && (Egaux = = 1))
{
if (T1 [i] != T2 [i])
Egaux = 0;
else
i++;
}
if (Egaux = = 1) printf ("Tableaux identiques.");
else printf ("Tableaux différents.");
}
29/10/2020
Taille des tableaux 96
• Expression 1:
• type Tableau[Taille];
• sizeof(type) * Taille;
29/10/2020
Taille des tableaux
97
29/10/2020
Tableaux et pointeurs 98
29/10/2020
Plan
• Partie 1: les pointeurs
29/10/2020
Quand l'utiliser ?
100
Il faut :
1. Une variable normale de type pointeur sur la donnée à
stocker
29/10/2020
Fonction malloc()
• Syntaxe:
#include<stdlib.h>
void* malloc (size_t taille)
29/10/2020
Fonction malloc()
• Syntaxe:
#include<stdlib.h>
void* malloc (size_t taille)
conversion (cast)
29/10/2020
Exemple:
#include<stdio.h>
#include<stdlib.h>
int main() {
int * ptr = NULL;
int max;
printf("saisir le nombre d’éléments");
scanf("%d", &max);
/* allocation d’un tableau d’entier de taille max*/
ptr = malloc (max * sizeof(int));
/*ou encore ptr = (int*) malloc (max * sizeof(int)); */
if (ptr == NULL)
printf ("Echec d’allocation \n");
else
printf ("succès d’allocation \n");
free (ptr);
return 0;
}
29/10/2020
Fonction calloc()
• Permet de réserver un espace mémoire et l’initialiser à 0
• Syntaxe:
#include<stdlib.h>
void* calloc (size_t nbre, size_t taille)
29/10/2020
Exemple:
Résultats d’exécution
29/10/2020
Fonction realloc()
• Permet de modifier la taille d’un espace déjà réservé à l’aide
de malloc() ou de calloc()
• Syntaxe:
#include<stdlib.h>
void* realloc (void* bloc, size_t taille)
29/10/2020
Remarques
29/10/2020
Exemple:
29/10/2020
111
PASSAGE DE TABLEAUX
DANS LES FONCTIONS
29/10/2020
Principe 112
29/10/2020
Exemple de Passage de données
return N;
}
113
29/10/2020
Exemple: Passage d’un tableau en
paramètre
#include <stdio.h>
double MoyenneTableau (int v[], int Taille);
int main()
{
int Valeurs[4] = {2, 4, 3, 8};
double ValeurMoyenne; Taille de v
ValeurMoyenne = MoyenneTableau (Valeurs, 4);
printf(“Moyenne: %f\n”, ValeurMoyenne);
}
Locale
29/10/2020
116
29/10/2020
Localité des variables
int main()
{
int a, b, valmax;
printf(“ Tapez deux entiers: “);
scanf(“% d% d”, &a, &b); Visibles : a, b, valmax
valmax = max( a, b); NON visibles : maximum, v1, v2
29/10/2020
Passage par valeur
29/10/2020
Transmission par adresse
C'est l'adresse de v qui a été copiée
Pointe sur
void main () v 12
13
{
&v Adr
int v = 12;
void incremente (int *Adr)
incremente (&v);
{
}
* Adr = *Adr + 1;
}
120
29/10/2020
Passage par adresse :
29/10/2020
Exercices ?
Que contiennent X, Y et Z à la fin de la fonction main () ?
123
29/10/2020
Exercices 124
• Ecrire une fonction Affichage qui assure l’affichage des 12 valeurs utiles de
Nb_jours