Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Les pointeurs

Les pointeurs

Les pointeurs en C

351064ceb33623d2cd4973bfcd14552c?s=128

Boughida Adil

April 22, 2022
Tweet

More Decks by Boughida Adil

Other Decks in Education

Transcript

  1. Les pointeurs en C 1 Les pointeurs en C Enormément

    utilisé en C ! Pourquoi? A quoi ça sert? Manipuler directement la mémoire de l’ordinateur. Déclarer des tableaux de taille variable. …
  2. Les pointeurs en C 2 La notion d’adresse La mémoire

    de l’ordinateur peut être vu comme une série de cases. Ces cases sont repérées par des adresses. Dans ces cases sont stockées les valeurs des variables (ou des instructions). Adresses valeurs 65775417 123 65775416 3.2132 65775415 ‘M’ 65775414 ‘i’ 65775413 ‘a 65775412 ‘m’ Pour accéder à la valeur d’une variable ( i.e au contenu de la case mémoire) Il faut connaître son emplacement (c’est l’adresse de la variable) Lorsqu’on utilise une variable: Le compilateur manipule son adresse pour y accéder. Cette adresse est alors inconnue du programmeur
  3. Les pointeurs en C 3 Qu’est ce qu’un pointeur ?

    Un pointeur est une variable qui contient l’adresse d’une variable. Le stockage en mémoire de la variable (char, int, etc…) est alors sous la responsabilité du programmeur. On dit que le pointeur pointe sur l’objet pointé. Le type du pointeur est construit à partir du type de l’objet pointé. Exemple Déclaration d’un pointeur int * Var ; Nom de la variable Type de l’objet pointé On a déclaré une variable de type « Pointeur sur entier » Cette variable contient l’adresse d’une case mémoire contenant un entier
  4. Les pointeurs en C 4 Opérateur concernant les pointeurs &

    Opérateur d’adresse * Opérateur d’indirection Soit a une variable et p un pointeur: &a désigne l’adresse de la variable a *p désigne la variable pointée par p Comment accéder à la variable contenue dans un pointeur ? Comment récupérer l’adresse d’une variable ?
  5. Les pointeurs en C 5 Exemple de déclaration et d’utilisation

    int a=0; /* Déclare une variable entière. */ int *p; /* Déclare un pointeur sur un entier. */ p = &a; /* Initialise le pointeur avec l’adresse de cette variable. */ *p = *p + 1; /* Effectue un calcul sur la variable pointée par p, c’est-à-dire sur a lui-même, puisque p contient l’adresse de a. */ /* À ce stade, a ne vaut plus 0, mais 1. */
  6. Les pointeurs en C 6 Attention ! Il faut s’assurer

    que les pointeur que l’on manipule sont bien initialisé! Il doivent contenir l’adresse d’une variable valide. En général on initialise les pointeurs à la déclaration. On peut les initialisé comme pointeur NULL. int * Var; // pour le compilateur Var pointe sur quelque chose (n’importe quoi) int * Var = NULL; // le compilateur sait que Var ne pointe sur rien
  7. Les pointeurs en C 7 Comment initialiser un pointeur Affectation

    à une variable existante. int i = 2; int * p; p = &a; 65775417 65775416 65775415 65775414 65775413 65775412 i 2 P = &a = *p 65775415 On stocke dans p, l’adresse de a ->
  8. Les pointeurs en C 8 Comment initialiser un pointeur Affectation

    à une variable existante. int i,j; // i, j variables de type int int * pi, *pj; // pi et pj, variables de type « pointeurs vers int » pi=&i; // le pointeur est initialisé à &i, il pointe à l’adresse &i, donc sur i *pi=2; // accès à l’élément pointé, i est mis à 2 (*pi)++; // incrémente i qui passe à 3 pj=pi; // pj pointe au même endroit que pi (sur i)
  9. Les pointeurs en C 9 Arithmétique des pointeurs Les opérateur

    ++, --, +, = ….. Sont définis pour les pointeurs, mais attention, ils s’appliquent aux adresses. int * p; int a = 3; p = &a; 65775417 123 65775416 12 65775415 156 65775414 3 65775413 9 65775412 456 a p p = &a; -> p pointe sur a
  10. Les pointeurs en C 10 Arithmétique des pointeurs Les opérateur

    ++, --, +, = ….. Sont définis pour les pointeurs, mais attention, ils s’appliquent aux adresses. int * p; int a = 3; p = &a; p++ ; 65775417 123 65775416 12 65775415 156 65775414 3 65775413 9 65775412 456 a p p++; -> p pointe sur l’adresse de l’entier suivant