François Trahay

00...00 à 11...11)0x1001 est stocké l’octet
0x41
char (le caractère
A)int (par exemple
l’entier
0x11412233)
1 k dépend de l’architecture. Sur les processeurs modernes (64 bits), on a k = 64.
&var désigne l’adresse de var en
mémoire%p dans printf:affiche:
adresse de var: 0x7ffe8d0cbc7f
type* nom_variable;
type désigne le type de la donnée “pointée”char* pa; crée un pointeur sur une donnée de
type char:// pour l'exemple, les adresses sont codees sur 32 bits
char a = 'A'; // a est stocke a l'adresse 0x0000FFFF
// la valeur de a est 0x41 ('A')
char* pa = &a; // pa est une variable de 32 bits stockee
// aux adresses 0xFFFB a 0xFFFE
// la valeur de pa est 0x0000FFFF (l'adresse de a)
* ptr
exemple:

Un pointeur doit être systématiquement initialisé au moment de sa définition
fopen étudié au
CI5)Un free sur un pointeur doit être systématiquement suivi d’une mise à
NULL de ce pointeur.
Si un tableau est un argument de fonction
void f(int x[]) <=>
void f(int* x)tab[i] réécrit en *(tab + i)tab = 0x1000 et i=5tab[i] calcule
0x1000 + (5*sizeof(int)) = 0x1000 + 0x14 = 0x1014sizeof(tab) donne la taille d’un pointeur&tab donne l’adresse de
int[] tab, donc &tab != tabSi un tableau est une variable locale ou globale
int tab[3]; // alloue 3 int
tab est le nom de cet espace mémoireint tab[] = { 1, 2, 3 }; // idem + initialisationint tab[]; // interdit !sizeof(tab) renvoie la taille du tableauSi un tableau est une variable locale ou globale (suite)
&tab donne l’adresse du tableau
&tab == &tab[0] car tab
et tab[0] désignent les mêmes emplacements mémoirestab est implicitement transtypé vers son
pointeur au besoinint* tab2 = tab; réécrit en
int* tab2 = &tabif(tab == &tab) récrit en
if(&tab == &tab)f(tab) réécrit en f(&tab)printf("%p %p\n", tab, &tab); réécrit en
printf("%p %p\n", &tab, &tab);tab[i] réécrit en (&tab)[i] puis en
*(&tab + i)*(tab + i) réécrit en *(&tab + i)Rappel:
void* malloc(size_t nb_bytes);
nb_bytes octets et retourne un pointeur sur la
zone allouéechar* str = malloc(sizeof(char)* 128);NULL en cas d’erreur (par ex: plus assez de
mémoire)Attention ! Risque de “fuite mémoire” si la mémoire allouée n’est jamais libérée
void free(void* ptr);malloc est situé à l’adresse
ptr&var)type : type* ptr;ptr++)NULL*ptrptr->champptr[i]int* ptr = malloc(sizeof(int)*5);free(ptr);