Langage C Chapitre06
Langage C Chapitre06
Langage C Chapitre06
24 janvier 2023
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 1 / 47
Introduction
Notion d'un pointeur
Relation entre Pointeur et tableau
Allocation dynamique
Introduction
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 2 / 47
Introduction
Notion d'un pointeur
Relation entre Pointeur et tableau
Allocation dynamique
Introduction
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 3 / 47
Introduction
Notion d'un pointeur
Relation entre Pointeur et tableau
Allocation dynamique
Introduction
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 3 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 4 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 5 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 5 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 6 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 7 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Syntaxe en algorithmique
VAR p1 : ∧ entier
p2 : ∧ caractère
p3 : ∧ réel
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 8 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Syntaxe en algorithmique
VAR p1 : ∧ entier
p2 : ∧ caractère
p3 : ∧ réel
Algorithme pointeur
VAR a : entier, b :∧ entier
DÉBUT
b ←− @a
b∧ ←− 5
FIN
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 8 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Syntaxe en langage C :
type * nompointeur ;
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 9 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Syntaxe en langage C :
type * nompointeur ;
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 9 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Syntaxe en langage C :
type * nompointeur ;
Programmation C
Opérateur unaire d'adressage & :
L'opérateur d'adressage & permet de calculer l'adresse numérique
réelle d'une variable située dans la mémoire de l'ordinateur.
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 10 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Programmation C
Opérateur unaire d'adressage & :
L'opérateur d'adressage & permet de calculer l'adresse numérique
réelle d'une variable située dans la mémoire de l'ordinateur.
Opérateur unaire de contenu * :
Une fois qu'un pointeur a été initialisé, l'opérateur * permet
d'accéder à la valeur contenue dans l'adresse pointée.
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 10 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 11 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 12 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Addition
L'addition d'un entier i avec la valeur d'un pointeur ptr donne
comme résultat un pointeur de même type dont la valeur égale :
(ptr + i) * sizeof(type_pointeur).
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 13 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Addition
L'addition d'un entier i avec la valeur d'un pointeur ptr donne
comme résultat un pointeur de même type dont la valeur égale :
(ptr + i) * sizeof(type_pointeur).
Addition
int main(){
short i = 5, z = 3, *ptr1,*ptr2 ;
ptr1 = &z ;
ptr2 = ptr1 + i ;
printf("valeur de ptr %p",ptr2) ;
}
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 13 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Soustraction
La soustraction d'un entier i avec la valeur d'un pointeur ptr donne
comme résultat un pointeur de même type dont la valeur égale :
(ptr - i) * sizeof(type_pointeur)
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 14 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Soustraction
La soustraction d'un entier i avec la valeur d'un pointeur ptr donne
comme résultat un pointeur de même type dont la valeur égale :
(ptr - i) * sizeof(type_pointeur)
Soustraction
int main(){
int i = 5, z = 3, *ptr1,*ptr2 ;
ptr1 = &z ;
ptr2 = ptr1 - i ;
printf("valeur de ptr %p",ptr2) ;}
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 14 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Diérence
La diérence de deux pointeurs ptr1 et ptr2 pointant tous les deux
vers des objets de même type, donne un résultat dont la valeur est
égale (ptr1 - ptr2)/sizeof(Type).
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 15 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Diérence
La diérence de deux pointeurs ptr1 et ptr2 pointant tous les deux
vers des objets de même type, donne un résultat dont la valeur est
égale (ptr1 - ptr2)/sizeof(Type).
Diérence
int main(){
short i = 5, j = 8, *ptr1,*ptr2 ;
ptr1 = &i ;
ptr2 = &j ;
printf("valeur de ptr %hi",(ptr2 - ptr1)) ;}
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 15 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 16 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 17 / 47
Introduction Dénition d'un pointeur
Notion d'un pointeur Déclaration d'un pointeur
Relation entre Pointeur et tableau Arithmétiques des pointeurs
Allocation dynamique Passage par adresse
Permutation2 en langage C
#include<stdio.h>
void permuter2(short *a, short *b){
int c ;
c = *a ;
*a = *b ;
*b = c ;}
int main(){
int x = 5,y = 9 ;
permuter2(&x,&y) ;
printf("x = %hi, y =%hi",x,y) ;
return 0 ;}
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 19 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 20 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Tableau et Pointeur
Le nom de tableau est modélisé comme un pointeur constant qui
mémorise l'adresse de premier élément.
A l'aide de cette adresse, nous pouvons accéder à l'ensemble des
éléments d'un tableau.
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 21 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 22 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Remplir un tableau
VAR T :TAB et A :∧ entier short T[N], *A ;
DÉBUT int main() {
Pour A de T à T+N-1 for(A=T ;A<T+N ;A++)
pas←−1 faire scanf("%hi",A) ;
Lire(A) return 0 ;}
FinPour
FIN
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 23 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Achage de tableau
Achage de tableau
VAR T :TAB et A :∧ entier short T[N], *A ;
DÉBUT int main() {
Pour A de T à T+N-1 for(A=T ;A<T+N ;A++)
pas←−1 faire printf("%hi",*A) ;
Écrire(A∧ ) return 0 ;}
FinPour
FIN
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 24 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 25 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 26 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 27 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Chaîne et Pointeur
Le nom d'une variable chaîne fait référence à un pointeur constant
sur l'adresse de premier caractère.
En eet, cette adresse nous facilite les opérations de remplissage,
traitement et achage d'une chaîne.
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 28 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Chaîne et Pointeur
VAR CH : chaîne #include <string.h>
ST : ∧ caractère char CH[25], *ST ;
DÉBUT int main( ){
ST ←− CH ST=CH ;
Lire(ST) gets(ST) ;
Écrire(ST) puts(ST) ;
FIN return 0 ; }
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 29 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 30 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Pointeur double
Un pointeur simple permet de mémoriser l'adresse d'une variable.
Un pointeur double permet de mémoriser l'adresse d'un pointeur.
Alors, un tableau à deux dimensions est considéré comme un
pointeur double, parce qu'il peut mémoriser l'adresse de premier
pointeur dans une matrice.
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 31 / 47
Introduction Tableau est un pointeur
Notion d'un pointeur Remplissage et achage avec un pointeur
Relation entre Pointeur et tableau Pointeur comme un paramètre
Allocation dynamique Chaîne est un pointeur
Notion de pointeur double
Pointeur double
Un pointeur simple permet de mémoriser l'adresse d'une variable.
Un pointeur double permet de mémoriser l'adresse d'un pointeur.
Alors, un tableau à deux dimensions est considéré comme un
pointeur double, parce qu'il peut mémoriser l'adresse de premier
pointeur dans une matrice.
4 Allocation dynamique
Dénition d'allocation dynamique
Avantages de l'allocation dynamique
Segment mémoire tas
Allocation dynamique en langage C
Allocation pour un pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 33 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Allocation dynamique
Dénition
L'allocation dynamique est l'opération qui consiste à allouer et
réserver un espace-mémoire avec une taille dénie par l'utilisateur.
Cette opération permet de créer des types de données, des
tableaux, des chaînes et des structures de toutes tailles au moment
d'exécution d'un programme.
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 34 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
4 Allocation dynamique
Dénition d'allocation dynamique
Avantages de l'allocation dynamique
Segment mémoire tas
Allocation dynamique en langage C
Allocation pour un pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 35 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Allocation dynamique
Avantages
L'allocation dynamique permet de créer des tableaux et structures
dynamiques avec des pointeurs qui sont déjà déclarés et de pouvoir
mémoriser l'adresse de la première case allouée.
On peut allouer ou libérer la mémoire à tout moment. `
On peut accéder à la zone de mémoire à partir de n'importe
qu'elle fonction.
On peut décider de modier la taille (augmenter ou diminuer)
d'une zone de mémoire.
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 36 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
4 Allocation dynamique
Dénition d'allocation dynamique
Avantages de l'allocation dynamique
Segment mémoire tas
Allocation dynamique en langage C
Allocation pour un pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 37 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Allocation dynamique
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 38 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Allocation dynamique
Algorithmique
VAR ptr1 : ∧ entier, ptr2 : ∧ réel, ptr2∧ ←− 2,75
ptr3 : ∧ caractère ptr2+1∧ ←− 0,25
DÉBUT ptr3∧ ←− 'c'
ptr1 ←−allouer(2*entier) ptr3+1∧ ←− 'a'
ptr2 ←−allouer(2*réel) ptr3+2∧ ←− 'y'
ptr3 ←−allouer(3*caractère) libérer(ptr1)
ptr1∧ ←− 7 libérer(ptr2)
ptr1+1∧ ←− 11 libérer(ptr3)
FIN
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 39 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
4 Allocation dynamique
Dénition d'allocation dynamique
Avantages de l'allocation dynamique
Segment mémoire tas
Allocation dynamique en langage C
Allocation pour un pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 40 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Fonctions d'allocation
Les fonctions pour la gestion dynamique de la mémoire sont
dénies dans un chier bibliothèque "<stdlib.h>"
void * malloc(sizeof(type)*taille) : permet de réserver un
ensemble des cases mémoire et retourne l'adresse de début de
cet espace. L'avantage est de créer des tableaux et structures
dynamiques.
void * calloc(taille,sizeof(type)) : permet de réserver un
ensemble des cases mémoire initialisées à zéro et retourne
l'adresse de début de cet espace.
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 41 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 42 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Allocation dynamique
Programme C
#include <stdio.h> void remplir(short *A, short
#include <stdlib.h> T){
short * allouer(short *T){ short i ;
do{ printf("Donner la taille : ") ; for(i=0 ; i<T ; i++)
scanf("%hi",T) ; scanf("%hi",A+i) ;}
}while( *T<=2) ; int main( ) {
return short *tab = NULL, N ;
malloc(*T*sizeof(short)) ; } tab=allouer(&N) ;
remplir(tab,N) ;
free(tab) ;
return 0 ;}
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 43 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
4 Allocation dynamique
Dénition d'allocation dynamique
Avantages de l'allocation dynamique
Segment mémoire tas
Allocation dynamique en langage C
Allocation pour un pointeur double
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 44 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Allocation dynamique
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 45 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Allocation dynamique
Programme C
#include <stdio.h> for(i=0 ; i<*L ; i++)
#include <stdlib.h> *(P+i) =
short ** allouer(short *L, malloc(*C*sizeof(short)) ;
short *C){ return P ;}
short **P, i ; void remplir(short **A, short
do{ printf("Donner deux L, short C){
dimensions : ") ; short i,j ;
scanf("%hi%hi",L,C) ; for(i=0 ; i<L ; i++)
} while( *L<=2 || *C<=2) ; for(j=0 ; j<C ; j++)
P=malloc(*L*sizeof(short *(*(A+i)+j) =
*)) ; 2+rand()%11 ;}
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 46 / 47
Introduction Dénition d'allocation dynamique
Notion d'un pointeur Avantages de l'allocation dynamique
Relation entre Pointeur et tableau Segment mémoire tas
Allocation dynamique Allocation dynamique en langage C
Allocation pour un pointeur double
Allocation dynamique
Programme C
int main( ) {
short **mat = NULL, L,C,i ;
mat=allouer(&L,&C) ;
remplir(mat,L,C) ;
for(i=0 ; i<L ; i++)
free(*(mat+i)) ;
free(mat) ;
return 0 ;}
Hassen NAKBI :: Université de Sousse, ESSTHS Chapitre 1 : Les pointeurs 24 janvier 2023 47 / 47