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

Maîtriser les pointeurs constants et pointeurs vers constantes en C

En C, un pointeur est une variable qui stocke l'adresse mémoire d'une autre variable, et le mot-clé const est utilisé pour définir une variable ou un pointeur dont la valeur ne peut pas être modifiée une fois initialisée. Quand on combine pointeurs avec le mot-clé const, on peut contrôler deux choses −

Dans ce chapitre, nous examinerons les trois variations principales de pointeurs constants −

Pointeur constant

Un pointeur constant signifie que le pointeur lui-même est constant. Une fois initialisé pour pointer vers un emplacement mémoire, il ne peut pas pointer vers un autre emplacement, mais la valeur stockée à cet emplacement peut encore être modifiée.

Voici la syntaxe d'un pointeur constant −

type_donnees *const nom_pointeur = &variable;

Dans cette syntaxe, type_donnees est le type de données vers lequel pointe le pointeur, *const rend le pointeur lui-même constant, nom_pointeur est le nom du pointeur, et &variable lui affecte l'adresse mémoire d'une variable.

Exemple de pointeur constant

Dans cet exemple, on déclare un pointeur constant ptr et l'initialise avec l'adresse de la variable x. Ensuite, on change la valeur de x en utilisant ptr et on affiche sa valeur.

#include <stdio.h>
int main() {
    int x = 10;
    int y = 20;
    int *const ptr = &x; // pointeur constant vers int
    printf("Valeur de x: %d\n", *ptr);
    *ptr = 15; // peut changer la valeur à l'adresse
    printf("Valeur modifiée de x: %d\n", *ptr);
    // ptr = &y; // changer l'adresse du pointeur n'est pas autorisé
    return 0;
}

Ci-dessous la sortie du programme ci-dessus, qui montre que le pointeur reste fixé sur x, mais la valeur de x peut être mise à jour.

Valeur de x: 10
Valeur modifiée de x: 15

Exemple d'erreur de pointeur constant

Voici un exemple où on déclare un pointeur constant ptr et l'initialise avec l'adresse de la variable x. Ensuite, on essaie de le faire pointer vers l'adresse de la variable y. Cela donnera une erreur car un pointeur constant ne peut pas pointer vers un autre emplacement mémoire une fois initialisé.

#include <stdio.h>
int main() {
    int x = 10;
    int y = 20;
    int *const ptr = &x; // pointeur constant vers int
    printf("Valeur de x: %d\n", *ptr);
    // Tentative de changer le pointeur pour pointer vers y
    ptr = &y; // ne peut pas changer l'adresse d'un pointeur constant
    return 0;
}

Vous pouvez voir l'erreur ci-dessous, indiquant qu'on ne peut pas changer l'adresse d'un pointeur constant.

error: assignment of read-only variable 'ptr'

Pointeur vers constante

Un pointeur vers constante signifie que la valeur vers laquelle il pointe ne peut pas être changée, mais le pointeur lui-même peut pointer vers différentes adresses mémoire (ou variables).

Voici la syntaxe pour pointeur vers constante −

const type_donnees *nom_pointeur = &variable;
type_donnees const *pointeur = &variable;

Dans cette syntaxe, const type_donnees ou type_donnees const signifie que le pointeur pointe vers une valeur constante, nom_pointeur est le nom du pointeur, et &variable lui affecte l'adresse d'une variable.

Exemple de pointeur vers constante

Dans cet exemple, on déclare un pointeur ptr qui pointe vers une valeur constante et on lui affecte l'adresse de variable a. Ensuite, on fait pointer le pointeur vers une adresse différente de variable b et on affiche sa valeur.

#include <stdio.h>
int main() {
    int a = 5;
    int b = 30;
    const int *ptr = &a; // pointeur vers int constant
    printf("Valeur de a: %d\n", *ptr);
    // *ptr = 10; // on ne peut pas modifier la valeur via le pointeur
    ptr = &b; // changement d'adresse du pointeur
    printf("Pointe maintenant vers b: %d\n", *ptr);
    return 0;
}

Voici la sortie du programme ci-dessus, montrant le même pointeur pointant vers différentes variables.

Valeur de a: 5
Pointe maintenant vers b: 30

Exemple d'erreur de pointeur vers constante

Voici un exemple où on déclare un pointeur vers constante ptr et l'initialise avec l'adresse de la variable a. Ensuite, on essaie de changer la valeur de a à travers le pointeur. Cela donnera une erreur car un pointeur vers constante ne permet pas de modifier la valeur vers laquelle il pointe.

#include <stdio.h>
int main() {
    int a = 5;
    const int *ptr = &a; // pointeur vers int constant
    printf("Valeur de a: %d\n", *ptr);
    // on ne peut pas modifier la valeur via pointeur vers constante
    *ptr = 10;
    return 0;
}

Ci-dessous vous pouvez voir la sortie, qui montre une erreur indiquant qu'on ne peut pas modifier la valeur à travers un pointeur vers constante.

error: assignment of read-only location '*ptr'

Pointeur constant vers constante

Un pointeur constant vers une constante est un pointeur qui ne peut pas changer son adresse mémoire, et la valeur stockée à cette adresse mémoire ne peut pas non plus être changée. Les deux actions sont restreintes, donc on peut seulement lire la valeur, rien d'autre.

Voici la syntaxe pour un pointeur constant vers une constante −

const type_donnees *const nom_pointeur = &variable;

Dans cette syntaxe −

Exemple de pointeur constant vers constante

Dans cet exemple, on déclare un pointeur constant vers constante ptr et on lui affecte l'adresse mémoire de la variable a. On affiche ensuite la valeur de a en utilisant le pointeur.

#include <stdio.h>
int main() {
    int a = 10;
    const int *const ptr = &a; // pointeur constant vers constante
    printf("Valeur de a: %d\n", *ptr);
    // *ptr = 15; // on ne peut pas modifier la valeur
    // ptr = &b; // on ne peut pas changer l'emplacement du pointeur
    return 0;
}

Voici la sortie du programme ci-dessus −

Valeur de a: 10

Exemple d'erreur de pointeur constant vers constante

Dans cet exemple, on déclare un pointeur constant vers constante ptr et on l'initialise avec une variable a. Ensuite, on essaie de modifier la valeur à travers le pointeur et aussi de faire pointer le pointeur vers une autre variable. Les deux opérations ne sont pas autorisées et résulteront en une erreur de compilation.

#include <stdio.h>
int main() {
    int a = 10;
    int b = 20;
    const int *const ptr = &a; // pointeur constant vers constante
    printf("Valeur de a: %d\n", *ptr);
    // *ptr = 15; // on ne peut pas modifier la valeur
    // ptr = &b; // on ne peut pas changer l'adresse du pointeur
    return 0;
}

Ci-dessous vous pouvez voir la sortie montrant les erreurs −

Valeur de a: 10

Différence entre types de pointeurs constants

Le tableau suivant montre les différences entre un pointeur constant, un pointeur vers constante, et un pointeur constant vers constante.

Variation Définition Peut changer l'adresse ? Peut changer la valeur ? Exemple de syntaxe
Pointeur constant Un pointeur dont l'adresse est fixée, mais la valeur à cette adresse peut être modifiée. Non Oui
int *const p = &x;
Pointeur vers constante Un pointeur qui peut pointer vers différentes adresses, mais ne peut pas modifier la valeur à l'emplacement pointé. Oui Non
const int *p = &x;
Pointeur constant vers constante Un pointeur dont l'adresse est fixée, et la valeur à cette adresse ne peut pas être modifiée. Non Non
const int *const p = &x;

Conclusion

Dans ce chapitre, nous avons couvert les pointeurs constants et pointeurs vers constante en C. Les pointeurs constants fixent l'adresse mais permettent de changer la valeur, les pointeurs vers constante permettent de changer l'adresse mais pas la valeur, et les pointeurs constants vers constante restreignent les deux.

Langue C

  1. Maîtriser les fonctions en C : Exemples pratiques de récursivité et fonctions inline
  2. Maîtriser les entrées/sorties fichier en C++ : Lecture et écriture avec fstream
  3. Structures de données en C++ : Construire des programmes efficaces avec tableaux, structures et plus
  4. Boucles While vs Do-While : Comparaison claire avec exemples pratiques
  5. Maîtriser les templates de classe en C++ : Guide pratique
  6. Comprendre les variables en C# : types, stockage et utilisation
  7. Allocation mémoire dynamique en C : Comprendre malloc() avec exemples pratiques
  8. Maîtriser les entrées/sorties de fichiers en C : Créer, ouvrir, lire, écrire et fermer des fichiers en toute confiance
  9. Boucle do-while en C++ : Syntaxe, exemples pratiques et boucles imbriquées