C Pointeur

Apprendre les pointeurs en C est à la fois simple et intéressant. Grâce aux pointeurs, vous pouvez simplifier l'exécution de certaines tâches de programmation en C, et certaines tâches, comme l'allocation dynamique de mémoire, ne peuvent pas être réalisées sans pointeurs. Par conséquent, pour devenir un bon programmeur C, il est nécessaire d'apprendre les pointeurs.

Comme vous le savez, chaque variable a un emplacement mémoire, et chaque emplacement mémoire définit une&adresse utilisable accessible par l'opérateur, qui représente une adresse en mémoire.

Veuillez regarder l'exemple suivant, qui affichera l'adresse de la variable définie :

Exemple

#include <stdio.h> int main () { int var_example = 10; int *p; // Définir une variable pointeur p = &var_example; printf("Adresse de la variable var_example : %p\n", p); return 0; }

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

var_example 变量的地址: 0x7ffeeaae08d8

À travers l'exemple ci-dessus, nous comprenons ce qu'est une adresse mémoire et comment y accéder. Ensuite, voyons ce qu'est un pointeur.

Qu'est-ce qu'un pointeur ?

Un pointeur est une adresse mémoire, et une variable pointeur est une variable utilisée pour stocker des adresses mémoire. Comme les autres variables ou constantes, vous devez déclarer un pointeur avant de l'utiliser pour stocker l'adresse d'une autre variable. La forme générale de la déclaration d'une variable pointeur est :

type *var_name;

Ici,typeest le type de base du pointeur, qui doit être un type de données C valide,var_nameest le nom de la variable pointeur. L'astérisque utilisé pour déclarer un pointeur*est le même que l'astérisque utilisé dans la multiplication. Cependant, dans cette instruction, l'astérisque est utilisé pour spécifier qu'une variable est un pointeur. Voici des déclarations de pointeurs valides :

int *ip; /*Un pointeur vers un entier*/ double *dp; /*Un pointeur vers un double*/ float *fp; /*Un pointeur vers un float*/ char *ch; /*Un pointeur vers un caractère*/

Pour tous les types de données concrets, qu'il s'agisse d'entiers, de nombres à virgule flottante, de caractères ou d'autres types de données, le type de la valeur du pointeur correspondant est le même : il s'agit d'un nombre hexadécimal long représentant une adresse mémoire.

La seule différence entre des pointeurs de types de données différents est le type de données de la variable ou de la constante vers laquelle le pointeur pointe.

Comment utiliser les pointeurs ?

Lorsqu'on utilise des pointeurs, les opérations suivantes sont fréquemment effectuées : définir une variable pointeur, affecter l'adresse d'une variable au pointeur et accéder à la valeur à l'adresse disponible dans la variable pointeur. Ces opérations sont réalisées à l'aide de l'opérateur unaire*pour renvoyer la valeur de la variable située à l'adresse spécifiée par l'opérande. L'exemple suivant implique ces opérations :

Exemple

#include <stdio.h> int main () { int var = 20; /*Déclaration de la variable proprement dite*/ int *ip; /*Déclaration de la variable pointeur*/ ip = &var; /*Stocker l'adresse de var dans la variable pointeur*/ printf("Adresse de la variable var : %p\n", &var ); /*Adresse stockée dans la variable pointeur*/ printf("Adresse stockée dans la variable ip : %p\n", ip ); /*Accéder à la valeur à l'aide d'un pointeur*/ printf("Valeur de la variable *ip : %d\n", *ip ); return 0; }

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

var 变量的地址: 0x7ffeeef168d8
ip 变量存储的地址: 0x7ffeeef168d8
*ip 变量的值: 20

Pointeurs NULL en C

Lors de la déclaration d'une variable, s'il n'y a pas d'adresse exacte à attribuer, attribuer une valeur NULL à la variable pointeur est une bonne pratique de programmation. Un pointeur auquel une valeur NULL est attribuée est appelé un pointeurvide.

Le pointeur NULL est une constante de valeur zéro définie dans la bibliothèque standard. Considérez le programme suivant :

Exemple

#include <stdio.h> int main () { int *ptr = NULL; printf("L'adresse de ptr est %p\n", ptr ); return 0; }

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

ptr 的地址是 0x0

Sur 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 : elle indique que le pointeur ne pointe pas vers un emplacement mémoire accessible. Mais par convention, si un pointeur contient une valeur nulle (zéro), on suppose qu'il ne pointe vers rien.

Pour vérifier si un pointeur est nul, vous pouvez utiliser une instruction if, comme indiqué ci-dessous :

if(ptr) /*Si p n'est pas NULL, alors complétez*/ if(!ptr) /*Si p est NULL, alors complétez*/

Explication détaillée des pointeurs en C

En C, il existe de nombreux concepts liés aux pointeurs. Ces concepts sont tous simples, mais ils sont tous importants. Ce qui suit énumère quelques concepts importants liés aux pointeurs que les programmeurs C doivent bien comprendre :

ConceptsDescription
Arithmétique des pointeursQuatre opérations arithmétiques peuvent être effectuées sur les pointeurs : ++, --, +, -
Tableau de pointeursVous pouvez définir un tableau utilisé pour stocker des pointeurs.
Pointeur de pointeurC permet les pointeurs vers des pointeurs.
Passage de pointeurs à des fonctionsLe passage de paramètres par référence ou par adresse permet de modifier les paramètres transmis dans la fonction appelée.
Retourner un pointeur depuis des fonctionsC permet aux fonctions de renvoyer des pointeurs vers des variables locales, des variables statiques et de la mémoire allouée dynamiquement.
autres extensions