Académique Documents
Professionnel Documents
Culture Documents
Jinène Moslah
1
Un pointeur est une variable particulière, dont la valeur est
l'adresse d'une autre variable.
Déclaration :
type *pointeur ;
◦ le type est celui de(s) la variable(s) se trouvant à l‟adresse mémoire
stocké dans pointeur
◦ En accédant à cette adresse, on peut accéder indirectement à la
variable et donc la modifier.
◦ Le symbole * est utilisé entre le type et le nom du pointeur
◦ effectuer les appels par référence (i.e. écrire des fonctions qui modifient
certains de leurs paramètres)
3
Exemples de déclarations
Affectation de l‟adresse d‟une variable :
int i = 10; 5A0F3 10
int*p ; On dit que le pointeur p pointe vers i,
p = &i ; puisque p pointe vers l‟emplacement p i
mémoire où est enregistrée i.
Exemple 2:
nom_de_Pointeur = &nom_de_variable;
void main(void) p c
{ 0x91A2
0x1132 'a'
char c = 'a', d = 'z'; 0x1132
char *p;
d
'z'
0x91A2
p = &c;
printf("%c\n", *p);
p = &d;
printf("%c\n", *p);
} a
z L‟opérateur * (“valeur pointée par”)
Exemple
int*p, x, y;
printf("x\ty\t*p\tp\n");
p = &x; /* p pointe sur x */
x = 10; /* x vaut 10 */
y = *p -1; printf("%d\t%d\t%d\t%d\n" , x, y, *p,p);
*p += 1; printf("%d\t%d\t%d\t%d\n" , x, y, *p,p);
(*p)++; printf("%d\t%d\t%d\t%d\n" , x, y, *p,p);
*p=0; printf("%d\t%d\t%d\t%d\n" , x, y, *p,p);
*p++; *p=20; printf("%d\t%d\t%d\t%d\n" , x, y, *p,p);
#include <stdio.h>
void main() {
int *p, x, y;
p = &x; /* p pointe sur x */
x = 10; /* x vaut 10 */
y = *p - 1; printf(" y= *p - 1 =? = %d\n" , y); y vaut ?
*p += 1; printf(" *p += 1 =? *p = x= ? = %d %d\n" , *p, x); x vaut ?
(*p)++; printf(" (*p)++ =? *p = x= ? = %d %d alors y=%d \n" , *p, x, y);
incrémente aussi de 1 la variable pointée par p, donc x vaut ??.
y vaut 9
9
T[0] est équivalent à *T
T[i] est équivalent à *(T + i)
&T[0] est équivalent à T
short T[8] = { 10, 20, 30, 40, 50, 60, 70, 80 };
short *p = T;
printf("%d\n", T[3]); 40
printf("%d\n", *(T + 3)); 40
printf("%d\n", *(p + 3)); 40
printf("%d\n", p[3]); 40
p T
1000 10 20 30 40 50 60 70 80
1000 1004 1008 1012
1002 1006 1010 1014
10
char * malloc( unsigned taille);
Réserve taille octets, sans initialisation de l'espace. Retourne un pointeur sur une zone de
taille octets.
Exemple: #include<stdlib.h>
int* p;
p = (int *) malloc ( sizeof ( int )); /*en principe sizeof(int)=4 */
#include<stdlib.h>
int* tab;
tab = (int *) malloc(100 * sizeof ( int ));
void * realloc ( void *block, unsigned taille);
Modifie la taille affectée au bloc de mémoire fourni par un précédent appel à
malloc() ou calloc().
Important :
malloc, calloc, realloc retournent le pointeur NULL (0) si l'espace disponible est
insuffisant.
un test serait donc judicieux
La mémoire dynamique varie en cours
d'exécution, et peut n'être pas suffisante pour
allouer les variables, provoquant le plantage
du programme. Il faut donc tester le retour des
fonctions d'allocation et traiter les erreurs.