Pointeurs C

Les pointeurs sont des fonctionnalités puissantes de la programmation C et C ++. Avant dapprendre les pointeurs, découvrons les adresses en programmation C.

Adresse en C

Si vous avez une variable var dans votre programme, &var vous donnera son adresse dans la mémoire.

Nous avons utilisé ladresse de nombreuses fois en utilisant la fonction scanf().

Ici, la valeur saisie par lutilisateur est stockée dans ladresse de la variable var. Prenons un exemple fonctionnel.

Sortie

var: 5 address of var: 2686778

Remarque: Vous obtiendrez probablement une adresse différente lorsque vous exécuterez le code ci-dessus.

C Pointeurs

Les pointeurs (variables de pointeur) sont des variables spéciales qui sont utilisées pour stocker des adresses plutôt que des valeurs.

Syntaxe du pointeur

Voici comment déclarer des pointeurs.

Ici, nous avons déclaré un pointeur p de type int.

Vous peut également déclarer des pointeurs de cette manière.

Prenons un autre exemple de déclaration de pointeurs.

Ici, nous avons déclaré un pointeur p1 et une variable normale p2.

Assigner des adresses aux pointeurs

Prenons un exemple.

Ici, 5 est assigné à la variable c. Et, ladresse de c est attribuée au pointeur pc.

Obtenir la valeur de la chose pointée par des pointeurs

Pour obtenir la valeur de la chose pointée par les pointeurs, nous utilisons le * opérateur. Par exemple:

Ici, ladresse de c est attribuée au pointeur pc. Pour obtenir la valeur stockée dans cette adresse, nous avons utilisé * pc.

Remarque: Dans lexemple ci-dessus, pc est un pointeur, pas *pc. Vous ne pouvez pas et ne devez pas faire quelque chose comme *pc = &c;

À propos, * est appelé lopérateur de déréférencement ( lorsque vous travaillez avec des pointeurs). Il opère sur un pointeur et donne la valeur stockée dans ce pointeur.

Modification de la valeur pointée par des pointeurs

Prenons un exemple.

Nous avons attribué ladresse de c au pointeur pc.

Ensuite, nous avons changé la valeur de c en 1. Puisque pc et ladresse de c est le même, *pc nous en donne 1.

Prenons un autre exemple.

Nous avons attribué ladresse de c au pointeur pc.

Ensuite, nous avons changé *pc en 1 en utilisant *pc = 1;. Puisque pc et ladresse de c sont les mêmes, c sera égal à 1.

Prenons un autre exemple.

Initialement, ladresse de c est attribuée au pointeur pc en utilisant pc = &c;. Puisque c est 5, *pc nous donne 5.

Ensuite, ladresse de d est attribuée au pointeur pc en utilisant pc = &d;. Puisque d est -15, *pc nous donne -15 .

Exemple: Fonctionnement des pointeurs

Prenons un exemple de travail.

Sortie

Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2

Explication du programme

  1. int* pc, c;

    Ici , un pointeur pc et une variable normale c, tous deux de type int, sont créés.
    Comme pc et c ne sont pas initialisés initialement, le pointeur pc pointe vers aucune adresse ou une adresse aléatoire. Et, la variable c a une adresse mais contient une valeur de garbage aléatoire.
  2. c = 22;

    Ceci affecte 22 à la variable c. Autrement dit, 22 est stocké dans lemplacement mémoire de la variable c.
  3. pc = &c;

    Ceci attribue ladresse de la variable c au pointeur pc.
  4. c = 11;

    Ceci affecte 11 à la variable c.
  5. *pc = 2;

    Ceci modifie la valeur de lemplacement mémoire pointé par le pointeur pc vers 2.

Erreurs courantes lors de lutilisation de pointeurs

Supposons que vous vouliez que le pointeur pc soit pointez sur ladresse de c. Ensuite,

Voici un exemple de syntaxe de pointeur que les débutants trouvent souvent déroutant.

Pourquoi navons-nous pas obtenu une erreur lorsque en utilisant int *p = &c;?

Cest parce que

équivaut à

Dans les deux cas, nous créons un pointeur p (et non *p) et en lui attribuant &c.

Pour éviter cette confusion, nous pouvons utiliser linstruction comme ceci:

Maintenant que vous savez ce que sont les pointeurs, vous apprendrez comment les pointeurs sont liés aux tableaux dans le prochain tutoriel.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *