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

C - Pointeurs

Les pointeurs en C sont faciles et amusants à apprendre. Certaines tâches de programmation C sont effectuées plus facilement avec des pointeurs, et d'autres tâches, telles que l'allocation dynamique de mémoire, ne peuvent pas être effectuées sans utiliser de pointeurs. Il devient donc nécessaire d'apprendre les pointeurs pour devenir un parfait programmeur C. Commençons à les apprendre par étapes simples et faciles.

Comme vous le savez, chaque variable est un emplacement de mémoire et chaque emplacement de mémoire a son adresse définie, accessible à l'aide de l'opérateur esperluette (&), qui indique une adresse en mémoire. Considérons l'exemple suivant, qui imprime l'adresse des variables définies −

Démo en direct
#include <stdio.h>

int main () {

   int  var1;
   char var2[10];

   printf("Address of var1 variable: %x\n", &var1  );
   printf("Address of var2 variable: %x\n", &var2  );

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant −

Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

Que sont les pointeurs ?

Un pointeur est une variable dont la valeur est l'adresse d'une autre variable, c'est-à-dire l'adresse directe de l'emplacement mémoire. Comme toute variable ou constante, vous devez déclarer un pointeur avant de l'utiliser pour stocker une adresse de variable. La forme générale d'une déclaration de variable de pointeur est −

type *var-name;

Ici, tapez est le type de base du pointeur ; il doit s'agir d'un type de données C valide et d'un var-name est le nom de la variable pointeur. L'astérisque * utilisé pour déclarer un pointeur est le même astérisque utilisé pour la multiplication. Cependant, dans cette instruction, l'astérisque est utilisé pour désigner une variable en tant que pointeur. Jetez un œil à certaines des déclarations de pointeur valides −

int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */

Le type de données réel de la valeur de tous les pointeurs, qu'ils soient entiers, flottants, caractères ou autres, est le même, un long nombre hexadécimal qui représente une adresse mémoire. La seule différence entre les pointeurs de différents types de données est le type de données de la variable ou de la constante vers laquelle pointe le pointeur.

Comment utiliser les pointeurs ?

Il y a quelques opérations importantes, que nous ferons très fréquemment à l'aide de pointeurs. (a) Nous définissons une variable de pointeur, (b) affecter l'adresse d'une variable à un pointeur et (c) enfin accéder à la valeur à l'adresse disponible dans la variable pointeur. Ceci est fait en utilisant l'opérateur unaire * qui renvoie la valeur de la variable située à l'adresse spécifiée par son opérande. L'exemple suivant utilise ces opérations −

Démo en direct
#include <stdio.h>

int main () {

   int  var = 20;   /* actual variable declaration */
   int  *ip;        /* pointer variable declaration */

   ip = &var;  /* store address of var in pointer variable*/

   printf("Address of var variable: %x\n", &var  );

   /* address stored in pointer variable */
   printf("Address stored in ip variable: %x\n", ip );

   /* access the value using the pointer */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant −

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

Pointeurs NULL

Il est toujours recommandé d'attribuer une valeur NULL à une variable de pointeur au cas où vous n'auriez pas d'adresse exacte à attribuer. Ceci est fait au moment de la déclaration des variables. Un pointeur auquel est assigné NULL est appelé un null pointeur.

Le pointeur NULL est une constante avec une valeur de zéro définie dans plusieurs bibliothèques standard. Considérons le programme suivant −

Démo en direct
#include <stdio.h>

int main () {

   int  *ptr = NULL;

   printf("The value of ptr is : %x\n", ptr  );
 
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant −

The value of ptr is 0

Dans la plupart des systèmes d'exploitation, les programmes ne sont pas autorisés à accéder à la mémoire à l'adresse 0 car cette mémoire est réservée par le système d'exploitation. Cependant, l'adresse mémoire 0 a une signification particulière; il signale que le pointeur n'est pas destiné à pointer sur un emplacement mémoire accessible. Mais par convention, si un pointeur contient la valeur nulle (zéro), il est supposé ne pointer vers rien.

Pour rechercher un pointeur nul, vous pouvez utiliser une instruction 'if' comme suit −

if(ptr)     /* succeeds if p is not null */
if(!ptr)    /* succeeds if p is null */

Pointeurs en détail

Les pointeurs ont des concepts nombreux mais simples et ils sont très importants pour la programmation en C. Les concepts de pointeur importants suivants devraient être clairs pour tout programmeur C −

Sr.No. Concept et description
1 Arithmétique des pointeurs

Quatre opérateurs arithmétiques peuvent être utilisés dans les pointeurs :++, --, +, -

2 Tableau de pointeurs

Vous pouvez définir des tableaux pour contenir un certain nombre de pointeurs.

3 Pointeur à pointeur

C vous permet d'avoir un pointeur sur un pointeur et ainsi de suite.

4 Passage de pointeurs vers des fonctions en C

Le passage d'un argument par référence ou par adresse permet de modifier l'argument passé dans la fonction appelante par la fonction appelée.

5 Pointeur de retour des fonctions en C

C permet à une fonction de renvoyer un pointeur vers la variable locale, la variable statique et la mémoire allouée dynamiquement.


Langue C

  1. C Variables, constantes et littéraux
  2. Classe de stockage C
  3. Pointeurs C
  4. Relation entre les tableaux et les pointeurs
  5. Adresses et pointeurs C Pass
  6. Structures C et pointeurs
  7. Mot-clé global Python
  8. Pointeurs C++ avec exemples
  9. Variable C, types de données, constantes