Skip to content

Rappel en C

Introduction

1. Mémoire

355 356 357 ...

2. Définition des parties de cours

  • Structures de données : Structurer des données dans la mémoire avec des cases numérotés.

  • Algorithmique : Résoudre un problème de manière rapide, analyse d'algorithmes (estimer l'efficacité entre 2 algo proposés / faire la preuve qu'ils font leur travail).


Chapitre 1 : Rappel de C

Illustration : Adresses et pointeurs

int main(...){
    int a; //dans la memoire il va y avoir des cases réservés pour la variable a (4 cases car 1 case = 1 octet)
    char b; //réserver en mémoire une case pour l'objet b
    b= 3; //mettre 3 dans la case de b
    a = b; //modifier toutes les cases destiné de a par la valeur de b (4 * 8)
    &a; //opérateur de type (int *) permettant de récupérer l'adresse de a
    // l'adresse d'une variable sera toujours le plus petit numéro des cases de la mémoire (que ça soit big endian ou little endian)
    printf("%p",&a); //affiher l'adresse de a
    int * p; //pointeur prêt à mémoriser l'adresse d'un entier (réserver 8 cases / 8 octets)
    p= &a; //stock l'adresse de a dans p
    *p; // représente la valeur de la variable a
    *p = 5; // équivaut à faire a = 5
    *(&a) = 6; // équivaut à faire a = 6
}

Arithmétique des adresses

Illustration :

int T[5]; //réserver 5 int dans la mémoires
int* p = T;
*T = 5; //mettre l'entier 5 dans la première case du tableau (T[0])
*(T + 2) = 1; // mettre l'entier 1 dans T[2]

int a;
int T[10];
int b;
&b - &a; //ok &a et &b sont de type int *
(T+8) - (T+2);
&b < &a;

malloc et free :

Exemple :

#include<stdlib.h>
int* p = malloc(4*sizeof(int)) //alouer 4 cases dans la zone mémoire (16 octets)
*(p+2) = 3
free(p);