Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Pointeurs C

Pointeurs C

Dans ce didacticiel, vous découvrirez les pointeurs ; ce que sont les pointeurs, comment les utilisez-vous et les erreurs courantes que vous pourriez rencontrer lorsque vous travaillez avec eux à l'aide d'exemples.

Les pointeurs sont des fonctionnalités puissantes de la programmation C et C++. Avant d'apprendre 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é l'adresse à plusieurs reprises en utilisant le scanf() fonction.

scanf("%d", &var);

Ici, la valeur saisie par l'utilisateur est stockée dans l'adresse de var variable. Prenons un exemple concret.

#include <stdio.h>
int main()
{
  int var = 5;
  printf("var: %d\n", var);

  // Notice the use of & before var
  printf("address of var: %p", &var);  
  return 0;
}

Sortie

var: 5 
address of var: 2686778

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

Pointeurs C

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

Syntaxe du pointeur

Voici comment nous pouvons déclarer des pointeurs.

int* p;

Ici, nous avons déclaré un pointeur p sur int saisir.

Vous pouvez également déclarer des pointeurs de ces manières.

int *p1;
int * p2;

Prenons un autre exemple de déclaration de pointeurs.

int* p1, p2;

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

Attribuer des adresses aux pointeurs

Prenons un exemple.

int* pc, c;
c = 5;
pc = &c;

Ici, 5 est assigné au c variable. Et, l'adresse de c est affecté au pc pointeur.

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

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

int* pc, c;
c = 5;
pc = &c;
printf("%d", *pc);   // Output: 5

Ici, l'adresse de c est affecté au pc aiguille. Pour obtenir la valeur stockée dans cette adresse, nous avons utilisé *pc .

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

Au fait, * est appelé l'opé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.

int* pc, c;
c = 5;
pc = &c;
c = 1;
printf("%d", c);    // Output: 1
printf("%d", *pc);  // Ouptut: 1

Nous avons attribué l'adresse de c au pc pointeur.

Ensuite, nous avons changé la valeur de c à 1. Depuis pc et l'adresse de c est le même, *pc nous donne 1.

Prenons un autre exemple.

int* pc, c;
c = 5;
pc = &c;
*pc = 1;
printf("%d", *pc);  // Ouptut: 1
printf("%d", c);    // Output: 1

Nous avons attribué l'adresse de c au pc pointeur.

Ensuite, nous avons changé *pc à 1 en utilisant *pc = 1; . Depuis pc et l'adresse de c est le même, c sera égal à 1.

Prenons un autre exemple.

int* pc, c, d;
c = 5;
d = -15;

pc = &c; printf("%d", *pc); // Output: 5
pc = &d; printf("%d", *pc); // Ouptut: -15

Initialement, l'adresse de c est affecté au pc pointeur utilisant pc = &c; . Depuis c est 5, *pc nous donne 5.

Ensuite, l'adresse de d est affecté au pc pointeur utilisant pc = &d; . Depuis d est -15, *pc nous donne -15.

Exemple :Fonctionnement des pointeurs

Prenons un exemple concret.

#include <stdio.h>
int main()
{
   int* pc, c;
   
   c = 22;
   printf("Address of c: %p\n", &c);
   printf("Value of c: %d\n\n", c);  // 22
   
   pc = &c;
   printf("Address of pointer pc: %p\n", pc);
   printf("Content of pointer pc: %d\n\n", *pc); // 22
   
   c = 11;
   printf("Address of pointer pc: %p\n", pc);
   printf("Content of pointer pc: %d\n\n", *pc); // 11
   
   *pc = 2;
   printf("Address of c: %p\n", &c);
   printf("Value of c: %d\n\n", c); // 2
   return 0;
}

Sortie

Address of c: 2686784
Value of c: 22

Address of pointer pc: 2686784
Content of pointer pc: 22

Address of pointer pc: 2686784
Content of pointer pc: 11

Address of c: 2686784
Value of c: 2

Explication du programme

  1. int* pc, c;

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

    Cela affecte 22 à la variable c . Autrement dit, 22 est stocké dans l'emplacement mémoire de la variable c .
  3. pc = &c;

    Ceci assigne l'adresse de la variable c au pointeur pc .
  4. c = 11;

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

    Cela change la valeur à l'emplacement mémoire pointé par le pointeur pc à 2.

Erreurs courantes lors de l'utilisation de pointeurs

Supposons que vous vouliez pointeur pc pour pointer vers l'adresse de c . Ensuite,

int c, *pc;

// pc is address but c is not
pc = c;  // Error

// &c is address but *pc is not
*pc = &c;  // Error

// both &c and pc are addresses
pc = &c;  // Not an error

// both c and *pc values 
*pc = c;  // Not an error

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

#include <stdio.h>
int main() {
   int c = 5;
   int *p = &c;

   printf("%d", *p);  // 5
   return 0; 
}

Pourquoi n'avons-nous pas obtenu d'erreur lors de l'utilisation de int *p = &c; ?

C'est parce que

int *p = &c;

est équivalent à

int *p:
p = &c;

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

Pour éviter cette confusion, nous pouvons utiliser l'instruction comme celle-ci :

int* p = &c;

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


Langue C

  1. C# Hello World - Votre premier programme C#
  2. Mots-clés et identifiants C#
  3. Variables C# et types de données (primitifs)
  4. Opérateurs C#
  5. Opérateurs de bits et de décalage de bits C#
  6. Entrée et sortie de base C#
  7. Expressions, instructions et blocs C# (avec exemples)
  8. Commentaires C#
  9. Pointeurs C